![見出し画像](https://assets.st-note.com/production/uploads/images/99549312/rectangle_large_type_2_53896d1952504c8421ba7b79098c7011.png?width=1200)
No296 メールで使える文字コードとは?
メールはインターネットサービスの中でも最も古い世代のサービスになります。
最近は随分と減りましたが、メールでは時に文字化けして読めないメールが届くことがあります。
どうして文字化けという事象が発生するのでしょうか?
文字化けを解説するには、まず文字そのものにについて知っていただく必要があります。
今回は少々遠回りになりますが、メールで使われる文字コードについて解説します。
文字化けのメカニズムについては次回をお待ちください。
文字コードというもの
メールは文字情報の集まりです。
そして、コンピュータで扱うすべての文字はそれぞれ文字コードが決められています。
例えば"A"という文字は65番、"B"なら66番、小文字の"a"なら97番といった具合です。
アルファベット以外の記号も、"-"なら45番、""$"なら36番のように決まっています。
こういった決まりを「文字コード」と言います。
こういった文字コードは基本は各国で規定が行われています。
日本ではJIS(Japanese Industrial Standards:日本工業規格)で決められています。
上記のアルファベットなどの番号ははANSI(American National Standard Institute:米国国家規格協会)で定めた文字コードが元になっています。
この文字コードはASCII(American Standard Code for Information Interchange: 情報交換用米国標準コード)と呼ばれるものです。
上記のアルファベットなどは全世界で使われます。同じ"A"が国によって違う番号だと、国をまたいだ通信が違う文字になってしまいます。
そのため、各国はこのASCIIコードを採用して、アルファベットや最低限の記号を共通で使えるようにしました。
¥と\
とはいうものの、それぞれの国には独自の文化があり文字があります。
日本で文字コードを定めたのは1969年ですが、この時はアルファベットや記号は上記のASCIIを基本とし、カタカナを加えています。(JIS X 0201)
余談
この時点では、漢字はもちろんひらがなもコード化はされていませんでした。
漢字の文字コード化はすさまじい労力を必要とする作業ですし、
この時点で漢字を扱えるコンピュータは存在していませんでした。
実際、漢字の文字コード化にはこの後10年を要しています。
この時、JISではASCIIの一部の文字を置き換えたのです。
その代表が¥記号です。
あたりまえの話ですが、ASCIIコードは米国の文字コードですから、$記号はあっても¥記号などあるはずがありません。
そこで、日本であまり使わなさそうな記号であるバックスラッシュ(\)を¥記号に置き換えることにしたのです。
なんだか乱暴に思われるかもしれませんが、ASCIIのうちバックスラッシュを含むいくつかの文字はそれぞれの国の事情で別の文字にしても良いという国際ルールができていたのです。
規格が作られた1968年時点では現在のインターネットメールは全く想定外の絵空事に過ぎなかったのですから、仕方ないことではあります。
ですが、この影響は思いの他大きなものとなりました。
実は、JISの設計ではASCIIコードとJISコードの混在も想定されており、両者混在でも文字が正しく表示できるはずでした。
ですが、その手順がかなり面倒であった(かつ理解が難しい)ため、キチンと実現したプログラム(ソフトウェア)はほとんど作られませんでした。
そのため、メールで¥1000と表示されるべきところが、\1000となっているメールがあふれることになったのです。
もっとひどいのは米国で作られたプログラムの説明書などを読む場合です。
米国のソフトウェアはこんな事情など全く知りません。
そのため、説明書には矢印やロゴに\を使うことも多々ありました。
例えば、こういった表示ですね。
__\
/
日本ではこうなります。
__¥
/
同様に
\/
/\
も
¥/
/¥
となるわけですね。
ちなみに、皆さんが日常的にお使いのWindowsのディレクトリの区切り記号が¥記号になのも同じ理由です。
様々な日本語表現方式
さて、1978年には日本語(ひらがな、漢字、特殊記号類)がついに文字コード化(JIS X 0208)されました。第一水準だけでも3000文字弱、第二水準まで含めると6000文字弱の漢字が含まれる大規模なものです。
このX 0208では文字コードは区点コードという独特の表現方法で表記されています。
この区点を単純にコンピュータ上で表現すると、アルファベットやカタカナといった既存の文字コード(X 0201)と番号衝突が起きる面倒なことになりました。
もちろん、JISでは、両者を識別する方式は定めたものの、両者が識別できるプログラムを作るのが面倒だったこともあり、JIS方式はあまり受け入れられませんでした。
そのため、これを避けるためにいろいろな小細工がなされたのです。
その代表として、ここではシフトJISと、EUCを紹介します。
シフトJISは上記の課題をスマートに解決する妙案として提案されました。
「ずらす」という意味の通り、シフトJISは区点コードに簡単な計算をして番号をズラす
ことで、既存のアルファベットや半角カタカナと面倒なことなく共存できるもので、Windowsでは長らく、シフトJISが標準的な漢字の表現方式でしたが、現在はUNICODE(後述)に移行しています。
もう一つのEUCは主にエンジニアが使うUNIXというOS上でよく使われていた方式です。
こちらもアルファベットと簡単に共存できる点は同じですが、半角カタカナとは共存できないものでした。このEUCも今となっては過去の方式で、UNICODE(後述)に変わってきています。
これらはJISコードをそのままでは使いにくいため、メーカ側が苦肉の策として提供したものでした。
最近はユニコードコンソシアムという国際団体が規定しているUNICODE(ユニコード)が文字コードとしては主体となってきています。
UNICODEは上述の¥と\のように国によって文字が違ってしまうことが起きないようにするには、世界統一コードが一番という発想で始まった統一文字コードのプロジェクトです。既に開始から30年以上になっていて、バージョン15が2022年に公開されています。
収録している文字数も約15万字と、膨大な量になっています。
日本のJISが規定しているJISコードが約1万1千文字強であることを考えると、その膨大さがわかります。
15万字のうちのその多くは中国の漢字ですが、現在利用されている言語の表記文字はもちろん、歴史的文字と呼ばれるヒエログリフ(エジプトの象形文字)や中国の西夏文字なども含まれています。
その他にも各分野の専用文字(数学記号、音楽記号、天気記号など)や絵文字(日本のケイタイ発詳の文字)なども含まれています。
日常的なメールでの用途はもちろん、各分野の専門家の情報共有や情報資産の保管を容易とするための文字を全て網羅しようとする、野心的なプロジェクトです。
まとめ
コンピュータで使われる文字は全てに番号が割り当てられています。
そのルール(文字コード)には、いくつもの種類があります。
どのルールに基づいて決められた文字を使っているかがわからなければ、当然ながら文字が読めなくなります。
アルファベットと一部の記号は米国が定めたASCIIという文字コードを各国で採択した結果、ある程度は統一ができました。
ですが、各国の独自文字などもあり全てが統一されているわけではありません。
そのため、定義されている文字が異なっていると、送信元が意図しない表示となるケースがあります。(¥と\など)
また、文字コードには時代によっていろいろなものが登場しています。
日本語については、シフトJISやEUCといった文字コードも以前はよく使われていました。
文字化けについては、文字コードの取り違いなどいくつかの理由で発生しています。
今回は、メールで使われる文字コードについて解説をしました。
次回は今回のお話を前提に、文字化けの原因を探ります。
次回もお楽しみに。
(本稿は 2023年2月に作成しました)
本Noteはメルマガ「がんばりすぎないセキュリティ」からの転載です。
当所はセミナーなどを通して皆さんが楽しく笑顔でITを利用いただくために、 難しいセキュリティ技術をやさしく語ります。
公式サイトは https://www.egao-it.com/ です。