文字コードのお勉強

文字コードって、分かったと思っても、なにかの拍子で分からなくなる!
分からなくなったときに読み返そう。

文字コードってなんだ

文字コードは、数値。
1ならA、2ならBを指すというルールを決めて使う。このルールを文字コード体系という。
文字コード体系は、エンコードや、エンコーディングと言われることがある。
ASCIIという名前の文字コード体系では、65がAで、66がBを指すことになっている。
テキストファイルは、数値が書かれたファイル。

ここで、1がA、2がB、12がLだとして、ABという文字を12という数値としてファイルに保存すると、数値を文字に起こすとき、この12はABなのかLなのか分からなくなるので、文字コード体系では、数値は二進数を使い、1文字を何桁の数値で表わすのか決めておくことになっている。
1文字を8桁の二進数で表わすことにしたなら、00000001がA、00000010がB、00001100がLで、ABは0000000100000010となり、8桁づつ読めばABとしか読みようがなく、ABなのかLなのかと迷わなくてすむ。

文字コード体系にはASCIIやEUCUnicode、JISなど、色々な種類があるけど、違いは2つだけ。
(1)どの数値がどの文字を指すのか。(2)1文字を何桁の二進数で表わすのか。
文字コード体系の要素は、この2つだともいえる。

文字が化けるとき

当たり前だけど、ある文字コード体系にもとづく数値の並びを、ほかの文字コード体系にもとづく数値の並びだとみなして文字にすると、もとの文字とは違う文字、多くの場合は読めない文字になる。これがいわゆる文字化け。

たとえば、00100110がAで、1文字を8桁の二進数で表わすと決めたNISHIMURAという文字コード体系にもとづいてAという文字を保存し、00100110が&で、一文字を8桁の二進数で表わすと決めたNISHIKAWAという文字コード体系で読むと、これは&だということになる。
実際には半角の英数字と記号は多くの文字コード体系で共通しているようで、化けないことが多い。

文字化けのWEBを見ると、落ち着かない気持ちになるけど、こうして整理すると、なんのことはない。

WEBの文字化けは、たとえば、HTMLをSHIFT_JISで書いたのに、ファイルには「meta http-equiv="Content-Type" content="text/html; charset=utf-8"」なんて書くから起きる(と思う。)
SHIFT_JISという文字コード体系で書かれたHTMLファイルを、ブラウザーUTF-8という文字コード体系で読むから、化ける(と思う。)

フォントと文字コードの関係

文字を画面に表示するには「文字コード」と「文字の具体的な形」を照らし合わせる表が必要。なぜなら文字コード体系の「1はAだ」のAはあくまでもイデアであって、具体的な形を表わしていないから。この表がいわゆるフォント(だと思う。)

フォントは「文字の具体的な形」と「文字コード体系ごとの文字コード」の、一対多のデータベース(だと思う。)
登録してあるすべての文字の具体的な形を、EUC_JPでの文字コードと、SHIFT_JISでの文字コードで参照できるフォントがあれば、そのフォントはEUC_JPとSHIFT_JISに対応しているといえる(と思う。)
そのフォントが対応していない文字コード体系で保存した文章を表示すると、化ける(と思う。)

ほんとかな。