メールと文字コード - 第1回 機種依存文字

文字化けの主要な要因の一つは機種依存文字と呼ばれるベンダーが勝手に追加した文字です。

OSとしてWindowsのシェアが大きいために、Windows機種依存文字デファクトスタンダードのように使われています。丸数字や記号はビジネス文書でもよく使われていますし、はしご高などのIBM漢字は人名の表記としてよく使われています。

閉じた環境で利用する分には問題はあまり起きませんが、メールで機種依存文字を使用すると問題が生じることがあります。


日本語のメールは文字エンコーディングとしてISO-2022-JPを一般的に使います。しかし、機種依存文字ISO-2022-JPを構成する文字集合には含まれていないため、ISO-2022-JPでは符号化できません。Windows内部の文字エンコーディングとしてはCP50220やCP50221がISO-2022-JPの変種として使われており、機種依存文字はCP50220やCP50221として符号化することができます。

それでは、機種依存文字が含まれたメールの文字エンコーディングを次のヘッダのようにCP50221と指示して送ってよいかというとそうではありません。
Content-Type: text/plain; charset=CP50221

CP50221はWindows内部の文字エンコーディングであり、メールを受け取った側がその文字エンコーディングを理解することができません。似たような問題でApple Mailが機種依存文字を含んだメールを送ったときにCP932という文字エンコーディングを指示して送ってしまうことがあります。このケースも相手のメーラーがその文字エンコーディングを理解できずに文字化けしてしまいます。

WindowsメーラーがCP50221を指示して送ってしまうケースは実際には見かけず、文章をCP50221で符号化しておき、ISO-2022-JPを指示して送るケースがほとんどです。これはどういうことかというと、文字エンコーディングISO-2022-JPと宣言をしておきながら、実際はCP50221であるということです。このメールを受け取った側は文字エンコーディングISO-2022-JPとして扱おうとすると、機種依存文字が含まれているとISO-2022-JPとして扱えない文字コードが含まれてしまっているため、機種依存文字のみが文字化けしたり、機種依存文字以降の文字列が文字化けしたり、すべての文字が文字化けしたりします。

対応策としては、文字エンコーディングISO-2022-JPであると宣言されたメールを受け取ったら、実際の文字エンコーディングはCP50221である仮定して処理することです。このようにすると、機種依存文字を正しく扱い、文字化けを防ぐことができます。

実装系の話はまた後日掲載します。