見出し画像

文字化けの原理 (豈取律譌・險倥r譖ク縺 ??7譌・逶ョ??)

 DCX縺ァ縺吶?ゆサ頑律譁咏炊繧偵@縺ヲ縺?◆繧峨?∫?縺上↑縺」縺滄豪縺ョ闢九?豺オ繧定ァヲ縺」縺ヲ縺励∪縺??∝承謇九?隕ェ謖?r轣ォ蛯キ縺励※縺励∪縺?∪縺励◆縲ら坩閹壹′逋ス縺上↑繧九⊇縺ゥ縺ョ轣ォ蛯キ縺ッ蛻昴a縺ヲ縺ァ縺吶?ゅ★縺」縺ィ菫晏?蜑、繧呈焔縺ォ蠖薙※縺ヲ縺セ縺吶′縲∝ー代@縺ァ繧る屬縺吶→邨先ァ狗李縺?〒縺吶?ゅ@縺ー繧峨¥髻ウ繧イ繝シ縺ァ縺阪↑縺?コォ菴薙↓縺ェ縺」縺。繧?▲縺溘?縺医?






 お使いのブラウザや端末は正常です。あえて文章を文字化けさせて入りを書いてみました。

 文字化けとは、コンピュータ上で、文字をコンピュータに理解できる数値に変換する方法の不一致によって発生するものです。

 文字をコンピュータに理解できる数値にする方法は複数あって、有名なものはUTF-8Shift-JISの2種類です。文字を数値に変換するときと復元するときで別の方法を使った場合、うまく復元できず文字化けが生じるというわけです。

 上の文字化けした長い文は、

 DCXです。今日料理をしていたら、熱くなった鍋の蓋の淵を触ってしまい、右手の親指を火傷してしまいました。皮膚が白くなるほどの火傷は初めてです。ずっと保冷剤を手に当ててますが、少しでも離すと結構痛いです。しばらく音ゲーできない身体になっちゃったねえ。

 という文を本来UTF-8の形で書いたものを、Shift-JISで復元したことで発生した文字化けです。以下のサイトで作成しました。

 

 ところで、文字化けしたときにかなりの頻度で見かける文字があります。「縺」とか。ちなみにこれは「縺れる」と書いて「もつれる」と読むらしいです。どうしてこの文字が多くみられるのでしょうか?

 ちょっとだけ技術的な部分を説明します。 まず前提として、UTF-8は全角文字1つを3バイトで表します。対するShift-JISは全角文字1つを2バイトで表します。

 例えば、UTF-8の「あ」は内部の表現では「e3 81 82」となっています。これが文字「あ」に対する値です。一方、これをShift-JISで復元する場合を考えます。コンピュータは数値で表された「e3 81 82」を持っているので、Shift-JISのルールに従ってこれを全角文字に変換しようとします。Shift-JISでは1文字は2バイトで表されるので、最初の2バイトの「e3 81」をまず見て、全角文字に変換します。すると、Shift-JISで「e3 81」に対応する文字は「縺」になりますので、「縺」を復元します。

 こちらのサイトなどで、文字コードの種類と、それがコンピュータ内でどのような数値として扱われるかを調べられます。

https://www.ahref.org/mojicode.php

 これで調べると、日本語のひらがなはすべてe3 81 〇〇」という形式になっています。これをShift-JISで復元する場合、最初の2バイトの「e3 81」をまず復元するため、「縺」が復元されます。つまり、

日本語のひらがなはすべて、復元したときに「縺」が出てくる

ようにコンピュータによって変換されているのです。したがって、日本語の文章が文字化けしたときには「縺」が多く出てくるのです。

 他にも、似た種類の文字(感じなら、同じ部首で部首以外の画数が同じ等)ならUTF-8でエンコードしたときの数値の最初の2バイト(さっきでいう「e3 81」の部分)が同じになっていることが多く、それと対応するShift-JISの文字が変換によって発生するため、「文字化けで出てきがちな文字」が存在するのです。

 コンピュータの世界では、文字を数値として扱う方法が複数あるということに注意しないといけません。それではまた。

この記事が気に入ったらサポートをしてみませんか?