メールと文字コード - 第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である仮定して処理することです。このようにすると、機種依存文字を正しく扱い、文字化けを防ぐことができます。

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

メールと文字コード - 前書き

先日、次のようなすばらしい書籍が刊行されました。

プログラマのための文字コード技術入門 (WEB+DB PRESS plus) (WEB+DB PRESS plusシリーズ)

プログラマのための文字コード技術入門 (WEB+DB PRESS plus) (WEB+DB PRESS plusシリーズ)

軽く内容を眺めたところ、必要そうなことは網羅しており、良い入門書だと思います。
しかし、実際に開発を行っていくと、入門書の範囲ではカバーできない問題に出くわしてしまうことがあります。
ウェブ系の問題については情報はウェブ上に散見されますが、メールの情報についてはあまり情報がありません。
そのため、メールの文字コードの処理に関して私の経験*1をまとめてみようと思います。


本記事はメールの処理において文字コードをどのように扱うかをまとめてみます。特に日本語の処理を主題として扱います。

本記事では以下の条件を前提として説明を行います。基本的な用語についての解説は一切しません。先に紹介した本を是非とも読んでみてください。

  • 文字コードに関する基礎知識があること。
  • MIMEについて理解していること。

書き始めてみると、原稿用紙100枚くらいのボリュームになりそうな状況で、仕事の合間に書くため、1ヶ月くらいかかりそうです。そのため、書き進めた都度、掲載する予定です。
また、時間に余裕が出来たら、文字の制限や画像の関係ではてなダイアリーでは表現できないことがあるため、別のサイトでまとめ直して、公開しようと思っています。

*1:Muttの国際化・日本語対応パッチの開発、SpamAssassinの日本語対応パッチの開発

iPhoneからの投稿試験

先月、iPhoneを買ってからTwitterでつぶやいてばかりで、こちらは放置していました。
こっちもなんとかしようと「はてなtouch」というiPhoneのアプリで投稿の試験をしてみます。
ちなみに、TwitterのIDはttkzwです。

[comp] 第10回 まっちゃ445勉強会「仮想化技術大会」

11月29日にまっちゃ445勉強会に参加してきました。

今回のテーマは「仮想化技術大会」ですが、仮想化技術そのものというよりは仮想化技術を利用したソリューションがテーマといった感じでしょうか。クライアントサイドとしてはデスクトップ/アプリケーションの仮想化であり、サーバサイドとしてクラウドです。

Session 1: Xen Server, Xen Desktop (Citrix)

CitrixがXenを手に入れて何をやるのかなと思っていたのですが、XenDesktopやXenAppが出てきて「Xen」と言うブランドを利用したブランディングということなんでしょうか。XenDesktopやXenApp自体は元々Citrixが持っていた技術だったと思います。

北瀬さんの仮想化に関するページ
http://v12n.jp/

v12nって名前がよいですね。

Session2: OLACLE VM

OracleXenベースのOLACLE VMを出したのは謎だったのですが、OLACLEはOSも含めた総合的な(ワンストップ)ソリューションを提供したいということなんでしょうか。

Session 3: Windows Azure, Hyper-V

メインの話はMicrosoftクラウドサービスのWindows Azureの話でした。「アジュール」と発音するんですね。

Session 4: VMware vSphere

Citrixはクライアントサイドの仮想化から、VMwareはサーバサイドの仮想化から事業が進んでいますが、クライアントからサーバまでのすべての総合的な仮想化ソリューションを展開し、さらにはクラウドに方向が進んでいるようです。

Session 5: IIJ GIO

L2 VLANの話を聞けたのはおもしろかったです。さすがIIJ

おやつ

今日のおやつは胡桃入りのアップルパイです。
アップルパイとは思えないほどさっぱりしていておいしかったです。胡桃の食感もよいですね。