根本原因
まず、
コンピュータの世界は基本的に数値だけでできている世界です。
例えば、「痴」という文字をコンピュータは「痴」という文字として扱っているのではなく、実際には16進の「9273」という数値として扱っています。
(このネタの中では2桁や4桁の数値が何度か出てきますが、すべて16進表記の数値とご理解ください。)
「9273」という数値を「痴」という形に、たまたま割り当てているだけです。
これがコンピュータで文字を表示するときの大原則です。
単なる数値を人が見てわかる文字として表示するために、コンピュータは数値と文字との対応関係の表を持っています。
「9369」を「妬」
「9273」を「痴」
「9272」を「池」
と表示しようといった対応関係の表があるのです。
逆にいえば、コンピュータで表示できる文字には上記のような数値が必ず割り当てられています。
こういった数値と文字の対応関係を「文字コード(文字コード体系)」と呼んでいます。
そして非常に残念なことですが、この数値と文字の対応関係=文字コードには複数の流派が存在してしまっています。
ここまで「9273」=「痴」ということでお話ししていますが、これもShift_JISなどの文字コードの世界での話です。他の文字コードでは「9273」が他の文字に割り当てられていたり、「痴」という文字が別の数値だったりすることがあり得ます。
この文字コードが複数存在してしまっていることが、「痴」と文字化けする根本的な原因なのです。
具体的理由
根本原因については上記のとおりですが、「痴」になってしまうより具体的な理由を。
英語版Windowsなどでよく使われいる「Windows-1252」という文字コードがあります。
このWindows-1252では、
「’」は「92」
「s」は「73」
という数値です。
(このネタの中では「’」を全角で記述していますが、本当は半角のRight Single Quotation Markです。)
Windwos-1252という文字コードの世界では、
「92」「73」という数値を「’s」という文字で表示し
逆にいえば、
「’s」という文字を「92」「73」という数値で扱う
ルールになっているわけです。
しかし別の文字コード、例えば、日本でよく使われる「Shift_JIS」の世界では、「92」に割り当てられている文字は存在しません。
更に厄介なことに「9273」という数値が、「痴」という文字に割り当てられているのです!
別の文字コードである、Windows-1252でもShift_JISでも、半角英数字については同じ対応関係を持っています。
例えば半角アルファベットの「s」は、Windows-1252でも、Shift_JISでも、16進の「73」という数値なのです。
ですから、
Windows-1252で記述された英語の文書を、Shift_JISと間違って表示したとしても、一般的なアルファベットや数字の部分は何の問題もなく表示できてしまいます。
ところが、「92」という部分に割り当てられた文字は、Shift_JISには存在していません。
なおかつ、「92xx」といった数値には、割り当てられた文字がShift-JISの世界では存在しています。
例えば、
「9272」なら「池」
「9273」なら「痴」
という割り当てになっているのです。Shift_JISでは。
そのため、Windows-1252で作成したファイルに、「’」(92)の直後にアルファベットなどが続く語句を含んでいるときに、そのファイルの文字コードがShift_JISと誤認されてしまうと「痴」「池」のような文字化けが発生してしまうのです。
同じようなことが「9369」が「妬」と表示されてしまうケースでもいえます。
Windows-1252で「“」(これも実際は半角のLeft Double Quotation Mark)は「93」という数値で、「i」は「69」という数値です。
Shift_JISでは「93」に割り当てられた文字は存在せず、「93xx」に割り当てられた文字は存在します。
「93xx」の一つ「9369」が「妬」なのです。
まとめると、
ただ、
この文字コード絡みの話というのは、説明を読んだり聞いたりしてるだけではなかなかわからないという方が多いんじゃないかと思います。
もっとしっかり腑に落ちる感覚を味わいたいという方は、実際のファイルをバイナリエディタで開いて確認することをおすすめします。
サンプルファイルは、「s」と「’s」だけをpreタグで括った非常にシンプルな、文字化けするHTMLファイルです。
このサンプルファイルをローカルにダウンロードしてから、バイナリエディタとブラウザで同時に開き、どこが「s」(73)や「’s」(9273)なのか、「s」や「’s」の「73」を「72」に、あるいは「’」の「92」を「93」にして上書きしたらどうなるのか、ブラウザの[エンコード]を[西ヨーロッパ(Windows)][日本語(自動)]で切り変えながらご確認ください。
Home » ネット関連のネタ » IE・InternetExplorer(インターネットエクスプローラ)の使い方 » 英語のページで「痴」と文字化けする原因と理由