Yahoo! mail(日本語版) を使っ て書かれた日本語の電子メールを受け取ると、ときどき文字化けしていることが あります。ここでは、文字化けが発生する条件と、化けてしまったメールを受け 取ったときの復元法について考察します。
なお、私自身は Yahoo! mail は使っていませんので、以下の内容はかなり推 測を含んでいます。正確性その他についての保証は一切いたしませんので、あく まで参考としてご覧くださるようお願いいたします。
Yahoo! mail で書かれた日本語の電子メールを受け取ると、ときどき文字化 けしていることがあります。経験上、1行を改行せずに長く書いたときに文字化 けが発生しやすい傾向があるようです。
手元では10通強に渡って「1行が長いこと」に起因すると思われる文字化け が発生しているサンプルがあるのですが、それは1通の例外を除き、すべて以 下の特徴を共有しています。
第1項については、正確にはこうです。multipart/alternative の MIME 形式 で、plain text と html が一緒になってやってくるのですが、文字化けを含 んでいる方の part は日本語 EUC になっていて(charset を iso-2022-jp と宣 言していながら)、含んでいない方の part は正しく JIS コードで記述されて います。
上述の「ただ1通の例外」は、行頭から
のバイト数が異なるだけで、他の特徴については同じでした。ひどい
思い違いをしていました。もう一度見てみたところ、その1通の中で発生し
ていた6ヶ所の文字化けはすべて
という理由により発生していたものでした。この1通に ついては、以下の考察から除外することにします。
上の特徴から判断して、Yahoo! mail での日本語メールの内部的取り扱いは、 おおよそ次のようになっていると推察されます。
第2項の「何らかの理由」というのは、大方本家の英語版 Yahoo! mail で 「1000バイト以上の長い行は、読みやすくするため998バイト目で改行する」と いうような、多バイト文字のことなんかまるっきり考えていない杜撰な 仕様になっていて、それをそのまま使っている、といった所なのでしょう。
前項の考察に基づいて、「EUC の2バイト文字の途中で入ってしまった改行 を取り除く」ような script を作ったところ、正しく動作しているようですので 公開いたします。他に同じ症例で困っている方がもしいるようでしたら、お役に 立てば幸いです。
---------> fixyahooemailかなりいい加減な perl script で、EUC コードの範囲の判定は厳密ではあり ません。また、2バイトの EUC 文字しか考慮していません。JIS 補助漢字など、 3バイト以上の EUC 文字の、2バイト目以降に改行が割り込んでしまった場合 は正しく復元できないものと推測されます。
動作はまったく無保証です。使用する場合は、元のメールのバックアップを 必ずとった上で、自己責任でお使いください。なお、perl script である以上、 perl がないシステム上では当然動きません。念のため。
ファイル中に簡単な使用法を書きましたが、文字コードの変換は行っていま せん。この script で文字化けを修復した上で、別のツールで JIS コードへの 変換を行ってください。その場合、EUC と JIS が混在している文書でも正しく JIS コードに変換できるものを用いてください。私が手元で用いている ack は 問題なく動作してくれるようです。
また、本来もっとスマートに書けるのでしょう。お目汚し、お恥ずかしい限 りです。
一度添付ファイルを送ってもらったとき、ファイル名に日本語が使われてい たのですが、Content-Disposition: フィールドにファイル名が日本語 EUC でそのまま書かれていたのにはびっくりさせられました。
また、charset として iso-2022-jp を宣言していながら、「半角カナ」の交 じった文書も送って来るようです。ESC ( I の escape sequence はちゃんと入っ ているようなので、JIS コードに真面目に対応したメーラーなら問題なく表示で きるでしょうが、文字コードを厳格に取り扱うメーラーだと、おかしな表示にな ることもありえます。
それから、一度ヘッダーの日付部分に、曜日が漢字で書いてあったことがあ りました。daemon 起動時に日本語 locale が設定されてるって、それってどう なのよ…(笑)。
ここで書いて来た一連の事例はしばらく前のことだったので、最近はまた改 善されているのかもしれませんが、少なくとも 2006年の8月頃までは、Yahoo! mail での日本語の取り扱いにはまだ怪しい所が少なからず残っていたようです。