テキスト・エディターで書いたhtmlのファイルが、ブラウザーに読み込まれるまでの間、いったんバイナリー(0と1)のデータ)に変換されているのでしょうか? <HTMLのファイル>→<01...>→<ブラウザーの表示>

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/11/16 07:36:50

ベストアンサー

id:sibazyun No.2

回答回数1824ベストアンサー獲得回数246

NO.1 のであっているのですが、もしまだピンとこないようでしたら。。。

文字コードというのがあり、NO.1にあるようにいろいろ規格はありますが、
まずは半角のA(大文字)なら バイナリー(2進数)表記で、01000001、
a(小文字)なら 01100001 になっています。

ということは、キーボードで a を押したら、キーボードからパソコンへの
ケーブルでは01100001が伝わり、メモリに入り、そのメモリの内容をエディタ
画面に出す際に、スクリーンへ01100001が伝わって、画面上で a が出ます。
エディタの内容をファイルに記録させると、しかるべき位置に01100001が
はいっています。たとえば なら <もaも> もそのようになっています。

ただ、HTMLを処理する機構も(あるいはエディタで文字を追加したり
削除したりする仕組みも)そこにあるバイナリデータは文字コードだと
おもっています。ですから、たとえば、
という3文字がきたら、どう扱う、
<h>という3文字がきたら、どう扱う、何もないときのaは文字として扱う、
といった処理は、いわばバイナリーかどうかというよりは、文字コードが
どうかでもって処理しているといってよいでしょう。
 そして、さらに、たとえば同じaでも、太字で、イタリックでという指示
がくると、フォントのセットから、太字のイタリックのaを選べという指示が
これもバイナリーのある種のコードで伝えられ、それによって、「太字の
イタリックのa」が表示させられる、ということになります。


=== 修正文 ===
NO.1 のであっているのですが、もしまだピンとこないようでしたら。。。

文字コードというのがあり、NO.1にあるようにいろいろ規格はありますが、
まずは半角のA(大文字)なら バイナリー(2進数)表記で、01000001、
a(小文字)なら 01100001 になっています。

ということは、キーボードで a を押したら、キーボードからパソコンへの
ケーブルでは01100001が伝わり、メモリに入り、そのメモリの内容をエディタ
画面に出す際に、スクリーンへ01100001が伝わって、画面上で a が出ます。
エディタの内容をファイルに記録させると、しかるべき位置に01100001が
はいっています。たとえば < a > なら < も a も > もそのようになっています。

ただ、HTMLを処理する機構も(あるいはエディタで文字を追加したり
削除したりする仕組みも)そこにあるバイナリデータは文字コードだと
おもっています。ですから、たとえば、 < a > という3文字がきたら、どう扱う、
<h>という3文字がきたら、どう扱う、何もないときのaは文字として扱う、
といった処理は、いわばバイナリーかどうかというよりは、文字コードが
どうかでもって処理しているといってよいでしょう。
 そして、さらに、たとえば同じaでも、太字で、イタリックでという指示
がくると、フォントのセットから、太字のイタリックのaを選べという指示が
これもバイナリーのある種のコードで伝えられ、それによって、「太字の
イタリックのa」が表示させられる、ということになります。

他2件のコメントを見る
id:sibazyun

とりあえず、「コメントは届いた」とお答えします。

2013/11/14 13:31:59
id:torimaki

お手数をおかけしました。感じが分かりました! ありがとうございます。

2013/11/14 14:42:37

その他の回答2件)

id:Sampo No.1

回答回数556ベストアンサー獲得回数104

ちょっと漠然とした質問でどう答えるか迷いますが、大筋正しい内容をお考えのように思います。

まずバイナリーという言葉をここで使うのはやめておきましょう。意味が広すぎます。

HTMLファイル(ストリーム)をブラウザが解釈して画面表示にするまでの流れはこう理解しましょう。

ファイルにはHTMLが記述されていますが、それは文字体系を何かしらのルールで記号化して並べてあります。「文字体系」のことは一般的に「キャラクタセット」といい、英語用の文字を表すASCII、英語・日本語の文字を表すJIS、世界中の文字を表すUnicodeなどあります。それを記号化する「何かしらのルール」を「エンコーディング」といい、UnicodeのエンコーディングにはUTF8,UTF16,UTF32などあります。JIS用のエンコーディングにはシフトJIS、EUC、ISO-2022-JPなどあります。ここら辺のキーワードは、聞いたことありますか?

まず、ブラウザはHTMLがどんな文字体系をどんなエンコーディングで構成されたものか識別して、そのルールに従って読み取らないといけません。そうして読まれた文字データはメモリ上で内部的な形式で格納されます(この時点で、ご質問の「バイナリ」だと言っていいかもしれません)。

読み取られた文字データはHTMLの文法に従って解釈されます。解釈の結果、要素が入れ子の階層になっているデータ構造としてメモリ上に展開されます(これも、ご質問の「バイナリ」に相当するでしょうか)。

要素の階層構造データは、HTMLの表示ルールに従って画面上で占める位置や大きさ・姿が決定され、実際に画面上に描画されます。

こういったデータ処理ですが、ご質問の「バイナリ」のイメージと比べてどうでしょうかね。

id:sibazyun No.2

回答回数1824ベストアンサー獲得回数246ここでベストアンサー

NO.1 のであっているのですが、もしまだピンとこないようでしたら。。。

文字コードというのがあり、NO.1にあるようにいろいろ規格はありますが、
まずは半角のA(大文字)なら バイナリー(2進数)表記で、01000001、
a(小文字)なら 01100001 になっています。

ということは、キーボードで a を押したら、キーボードからパソコンへの
ケーブルでは01100001が伝わり、メモリに入り、そのメモリの内容をエディタ
画面に出す際に、スクリーンへ01100001が伝わって、画面上で a が出ます。
エディタの内容をファイルに記録させると、しかるべき位置に01100001が
はいっています。たとえば なら <もaも> もそのようになっています。

ただ、HTMLを処理する機構も(あるいはエディタで文字を追加したり
削除したりする仕組みも)そこにあるバイナリデータは文字コードだと
おもっています。ですから、たとえば、
という3文字がきたら、どう扱う、
<h>という3文字がきたら、どう扱う、何もないときのaは文字として扱う、
といった処理は、いわばバイナリーかどうかというよりは、文字コードが
どうかでもって処理しているといってよいでしょう。
 そして、さらに、たとえば同じaでも、太字で、イタリックでという指示
がくると、フォントのセットから、太字のイタリックのaを選べという指示が
これもバイナリーのある種のコードで伝えられ、それによって、「太字の
イタリックのa」が表示させられる、ということになります。


=== 修正文 ===
NO.1 のであっているのですが、もしまだピンとこないようでしたら。。。

文字コードというのがあり、NO.1にあるようにいろいろ規格はありますが、
まずは半角のA(大文字)なら バイナリー(2進数)表記で、01000001、
a(小文字)なら 01100001 になっています。

ということは、キーボードで a を押したら、キーボードからパソコンへの
ケーブルでは01100001が伝わり、メモリに入り、そのメモリの内容をエディタ
画面に出す際に、スクリーンへ01100001が伝わって、画面上で a が出ます。
エディタの内容をファイルに記録させると、しかるべき位置に01100001が
はいっています。たとえば < a > なら < も a も > もそのようになっています。

ただ、HTMLを処理する機構も(あるいはエディタで文字を追加したり
削除したりする仕組みも)そこにあるバイナリデータは文字コードだと
おもっています。ですから、たとえば、 < a > という3文字がきたら、どう扱う、
<h>という3文字がきたら、どう扱う、何もないときのaは文字として扱う、
といった処理は、いわばバイナリーかどうかというよりは、文字コードが
どうかでもって処理しているといってよいでしょう。
 そして、さらに、たとえば同じaでも、太字で、イタリックでという指示
がくると、フォントのセットから、太字のイタリックのaを選べという指示が
これもバイナリーのある種のコードで伝えられ、それによって、「太字の
イタリックのa」が表示させられる、ということになります。

他2件のコメントを見る
id:sibazyun

とりあえず、「コメントは届いた」とお答えします。

2013/11/14 13:31:59
id:torimaki

お手数をおかけしました。感じが分かりました! ありがとうございます。

2013/11/14 14:42:37
id:SPX900 No.3

回答回数166ベストアンサー獲得回数49

テキストの場合は本当に至って単純に、1文字1文字がそれに対応する文字コードのバイナリデータに1対1で変換されるだけです。HTMLは、そのデータの並びの約束事を定義するものの一種で、その約束に従ってブラウザが表示しています。約束事はこれ一つではないので、違ったソフトが違った約束事に従って動作することも当然あります。ただ、テキストを使う約束事は人間が見て多少なりとも解りやすくしようという努力は払われているため、式や文章みたいな形になっていますね。

この約束事に従わなければ、期待通りに表示されませんし、テキストデータにおける最も基本の約束事、文字コードが不明になるとそれは文字化けとなります。

とっても根本的な話をすると、コンピュータには全てのデータはバイナリとして見えています。バイナリデータの並びに約束事を与えて、テキストにしたり音楽にしたり画像にしたりしているだけなんです。だからコンピュータがその約束事を知らない場合、バイナリはただのビット列に過ぎません。アプリというものは、一見ただのビット列に見えるけど、実はある約束事に従っているデータの扱い方をコンピュータに指示するものでもあるわけです。

他2件のコメントを見る
id:torimaki

コメント、ありがとうございます。たとえば、Aの場合、A→65(整数値)→01000001(2進数)ではなく、A→01000001というイメージでしょうか。

2013/11/14 14:49:25
id:sibazyun

そう、Aというキー→01000001です。この0と1だけの数値の並びを人は覚えにくいから、「65」とか「六十五」とか「sixty five」といいかえているのです。

2013/11/14 14:58:50
  • id:torimaki

    sampoさん、sibazyunさん、ご回答ありがとうございます。

    テキスト・エディター上の文字も、ブラウザー上の文字も、人は分かるけれど、コンピュータには分からない。ですので、テキスト・エディター → ブラウザー の間のどこかで、コンピュータに読める2進数に変換されているに違いない。そう思っていました。

    キーボードに打ち込む際に、文字はすでに2進数に変換され、メモリーに保存されているというのは、意外でした。ということは、こういう理解でよろしいでしょうか。

    たとえば、<title>a</title>と打ち込んだ文字は、0100010010001000000000・・・(デタラメです!)に変換され、メモリーに保存され、テキスト・エディターには<title>a</title>というふうに表示される。文章で書くと長いですが、一瞬で表示されますね!

    で、保存する際には、キャラクターセットを選ばなければならない。所定のものを選んで保存すると、エンコーディングされた文字が、今度は11000010000000001000011110001111101010・・・(こちらも、デタラメです!)として、メモリに保存される。ブラウザーを開いて見た場合には、タイトルのaとして表示される。sampoさんの「入れ子の階層」の概念とは、違うかも知れませんが。。。
  • id:Sampo
    なるほど、質問の意味がわかってきました。
    コンピュータは本当に、文字というものを扱っていません。扱っているのは整数だけです。

    <title>a</title>

    というテキストも、実際にはコンピュータの中では整数列です(ディスク上でも)。
    キーボードを打ったときに入力されるのもあくまでキー番号です。

    エディタは「このキー番号が押されたから、この文字番号をテキストに追加」という処理を実行しているだけで、それをユーザは「Aキーを叩いたらAという文字が挿入された」と思っているだけです。

    画面にAの文字が表示されるのも、整数値65(これがAの文字番号です)に対応した画像を単に画面に表示しているに過ぎません。(この画像データもまた整数列として表現されているわけですが)

    というわけで、途中でバイナリ(整数列)に変換されるのか、という質問にはこうお答えするべきでしたね。
    「途中でどころか、最初から最後までバイナリです」
  • id:sibazyun
    Sampoさんが「整数値65」と(十進数で)いっているのが、二進数、すなわちバイナリでは、
    私がNo.2で書いた 01000001 です。
  • id:torimaki
    学生の時、習った方法で、10進数を2進数に変換してみました。1000001となりました。あれれ、頭の0が足りない! というわけで、ネットで調べたところ「8ビットで表現するときは、足りないけた数分、上位(左側)に0を補充する」とありました。で、01000001となるわけですね。あ、なるほど。
  • id:sibazyun
    はい、ふつう、8ビット=1バイトという単位で計算しますね。1キロバイト=1024バイト。
  • id:sibazyun
    もう一つ例を。エディタで入力するとき、「Enter」あるいは「Return」というキーを押すと、
    バイナリで 00001011 というコードに変換されて、メモリに送られます。
    それは、「エディタというソフトウェアの中のスクリーンへの指示を出すところ(ブラウザ)」
    では、「改行せよ」という 00001011 の指示として送られ、画面上では改行します。

    しかし、htmlをご存知なら、いくら改行コードがあっても改行せず、どうしても改行させたい
    なら<,b,r,>という4文字の文字列を入力する必要があることをご存知とおもいます。
    つまり、htmlを 処理してスクリーンへの指示を出す、htmlブラウザの場合は、
    00001011 というコードが あっても、改行せよという指示をださないわけです。
    そのかわり、<,b,r,>の4コードが 続いてきたら、はじめて00001011 の指示を出して、
    改行させます。

    (あの、ドライバーソフトのことをよく知っているかた、もう少し実態は複雑なことは
    存じておりますが、単純化してのべております)
  • id:torimaki
    文字だけでなく、改行にも対応する2進数があるんですね。意外でしした。

    では、htmlブラウザーで改行が実行されている場合、<,b,r>の入力により、テキスト・エディターとは、また違った2進数で読み込まれるれていることになりますか? 10000100101010101010101010101010101010101010101のような(またデタラメに打っています。すみません)。
  • id:torimaki

    上記のコメント。 さらに<,b,r>を実行するために、「改行」の文字コードとは、また質の違った、(言葉は適切でないかも知れませんが)命令するための2進数が加えられているのでしょうか。
  • id:sibazyun
    いいえ、命令のための2進数がコードとしてあるわけではありません。

    htmlブラウザの原理をいうと、1文字読んでは、ふつうのアルファベットや漢字なら、
    そのまま表示対象とします。しかし、<のコードを読み込んだら、プログラムが分岐して
    (この表現はわかりますね。。。)別の「htmlタグの処理」に行きます。そして、
    bを読んで、さらにもし次が>だったら、「<,b,>」で、その次からの文字を太字の表示
    対象とするようにして、ふつうのアルファベット処理にもどります。しかし、
    bをよんで、つぎにrを読んで、次が>だったら、改行の指示を出して、そして、
    ふつうのアルファベット処理にもどります。
  • id:torimaki
    コメントありがとうございます。
    <のコードを読み込むと、通常の文字の処理とは違う経路を辿るイメージですね。
  • id:sibazyun
    そうです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません