文字コードの話。ぬるいよ!

文字化け、つまり、デジタルの文章が意図通りに見えない原因の最大のものに、意図した文字コードで読まれないということがある。
たとえば
こんにちは赤ちゃん!
という文字列をテキストファイルに書き出して、UTF-8で保存すると、16進数で
E3 81 93 E3 82 93 E3 81 AB E3 81 A1 E3 81 AF E8 B5 A4 E3 81 A1 E3 82 83 E3 82 93 EF BC 81
というコードになる。で、これをShift_JISで見ると、
縺薙s縺ォ縺。縺ッ襍、縺。繧・s.シ.
という文字列になる。文字化けである。

下図はくだんのテキストファイルをUTF-8で開いたサクラエディタ、xdump.exeで16進数ダンプしたもの、Shift_JISで開いたxyzzyを並べたものだ。

20140327mojibake1

で、これをある程度IT業界で仕事をしている日本人が見ると
「ああ、UTF-8で書いた日本語をShift_JISで解釈したんだなー」
と思う。

このパターンの文字化けが一番多い。
UTF-8はUnicode以降の新時代に最も使われているが、Shift_JISは昭和の日本のコンピューターでデファクトスタンダードであった。
ということで、システムはShift_JISでまだ作られているのに、UTF-8の新しいデータを流してしまうとこういう文字化けになる。

で、なぜ見分けがつくかというと、「縺」という字が異常に多くなるのである。
これは音読みではレン、訓読みでは縺れると書いてモツレルと読む字であるが、なぜこれが多くなるのであろうか。

これは「縺」という文字のShift_JISコードが0xE381だからである。

20140327mojibake2

ひらがなの文字コードは、最初が「ぁ」(小書きのあ)である。
「あ」ではないので注意したい。
「ぁあぃいぅうぇえぉおかがきぎくぐ・・」という順番になっている。
これは
「ファンタジー」(ふぁんたじー)
「不安」(ふあん)
「フィンランド」(ふぃんらんど)
という言葉をよみがな順にソートしたときにちゃんとこの順になるようになっているのだ。

で、ひらがなの「ぁ」がUTF-8では0xE38181、「み」が0xE381BFであって、ここまでのひらがなが全部0xE381で始まる。
「む」が0xE38280、「ん」が0xE38293であって、全部0xE382始まりである。
これが「繧」(ウン)という字であって、「繧とは、繧繝という語でしか(たぶん)使われない漢字(日本の国字)」だそうである。

繧とは (ウンとは) [単語記事] - ニコニコ大百科

繧繝はウンゲンと読み、「同じ色を濃から淡へ、淡から濃へと層をなすように繰り返す彩色法」だそうだ。

うんげん【繧繝/暈繝】の意味 - 国語辞書 - goo辞書

繧繝 - Google 検索

UTF-8のカタカナは、「ァ」が0xE382A1、「タ」が0xE382BFであって、これらの字をShift_JISで読むと繧繝の繧になる。
残りのカタカナ全部、「ダ」から「ヶ」までは0xE383始まりであって、これが面白いことに繧繝の繝(ゲン)である。
もっともこれはたぶんぜったい偶然の一致ではなくて、文字コードを採集した人がウンゲンという言葉もあったな、と思って連続して入れたのであろう。

ということで、縺れる繧繝(もつれるうんげん)という、グラデーションの糸がもつれている感じのイメージの言葉を覚えておけば、UTF-8で書かれた日本語(ひらがなとカタカナ)をShift_JISで開いた時に出現しがちな字を全部覚えられることになる。
でも、実際には見た感じでだいたい覚えてしまうので、こんなこと覚える必要はあまりない。
(じゃあ書くなよ!)
他に、JIS(ISO-2022-JP)で保存したファイルをShift_JISで開いてしまうと$(アスキーのドル記号)がやたら多くなるとか、EUC-JPで保存したのをShift_JISで開いてしまうと半角カナが異常に多くなるとか、そういうパターンがある。
どれもそのうち、自然にすぐわかるようになるので無理に覚える必要はない。