文字化けはなぜ起きる?文字コードってややこしい…

連日寒い日が続いておりまして、両手指先はセメダイン塗って乾いたような状態になっております。もうちょっとしたらひび割れて来るものと思われます。そんな指で今日は仕事の長めのメール、ほとんどブログぢゃねーかというのを2本書いたのでこのブログ書くの明日にしようかと思いましたが、仕事が行き詰まり気分転換にキーボードをパチパチ打って行きます。

先日あるサイトをいじりましてやれやれ終ったと思ったら、フォームから送信した文字が化けてしまっていて慌てて修正しました。これは単にフォームのページの文字コードをCGIが要求するeuc-jpとすべきところを通常よく使うUTF-8にしたまんまだったことが原因で、ケアレスミスでございました。

って書くと文字コードのことわかってるような感じを醸し出していますが、実はその仕組みを説明せよと言われると全くもってできません。よくある文字化けの現場として、例えばiPhoneのメールソフトからWinマシンでメールを見る人にメールを送ると文字化けしてるぞ〜というのがあります。なぜ文字化けは起こるのか?と聞かれたらあっちとこっちで文字コードが違ってたからということになるんだと思います。だからと、そっちで文字コード変えて読んでくれたまえ。という会話は普通しませんで、例えばGmailアプリから再度送り直したりしてことなきを得ます。

こうして普段当たり前のように文字を打ってますが、『あ』とか『正』とかの文字そのものを打ってると思ってしまってるのが、そもそもの認識違いということに最近文字コードについてググりましたところ気がついた次第です。パソコンでこうして文字を打っている行為ってのはパソコンに数値の組合せを指示して文字なら文字を表示させているということだとありました。なるほど…。

例えば、『ようこそ』という4文字は
よ=82E6
う=82A4
こ=82B1
そ=82BB
というように16進数の文字コードの組合せでそれぞれの文字を表示させているということのようです。文字化けというのはこの組合わされたコードの解釈がコードの種類によって変わって来ることから起こるわけです。

例えば『平常』はUFT-8で平=E5B9B3で、常はE5B8B8の文字コードで表示されるけど、この文字コードをEUC-JPが解釈すると、平での組合せにあったE5B9が『綛』となり、平のB3と常でのE5で『喝』となり、常でのB8B8で『幻』を表示するということになります。これが文字化けの仕組みということになるようです。

DTP&印刷スーパー仕組み辞典の図表より言語化引用

漢字字典 部首読み方索引などのサイトで漢字調べるとこんな感じで文字コードも記されています。
漢字字典見本
文字コードってなんでそんなに何種類も発生することになったんかいなと調べてみますと、まずコンピューターはそもそも英語圏で生まれたもので使われる文字は最初アルファベットと数字だけで1バイトの文字コードで良かったのだけど、我々日本人の使う日本語をはじめ中国語などアルファベットだけではないその膨大な文字数を扱うために2バイトの文字コード体系が必要になり多様化していったということです。

で、その漢字もこの世の全部ということではなくある程度、範囲を決めておこうと規格が設定されました。規格の代表格として以下のようなもの。
ASCII=英語で使用する文字、記号
ISO-8859=ヨーロッパ圏で使用する文字記号
JIS X 0208=漢字、ひらがな、カタカナ、英数、記号
Unicode=世界中の文字、記号

日本語に関して『JIS X 0208』という規格は、漢字、ひらがな、カタカナ、英数、記号などで約6,000字分が定義されているということです。で、やがてこれでは不便ということになったのでしょう、さらに文字追加(4,000字分)して『JIS X 0213』という規格が出来ているようです。

というようにまだいろいろありますが、こんな風に規格が設けられて来ました。

そんなわけでこの世界掘り下げて行くと、一生掛けた研究テーマになるくらいなのでとりあえず、こんな表面的なところで止めときます。深すぎる。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です