MobileMe を使っていると、いくつかのメールが文字化けして届くことに気づいた。調べてみると、次の条件が重なった場合に化けるようだ。
- メールヘッダの
Content-Type
節においてcharset
が指定されていない。 - メール本文に ASCII 文字以外が使用されている。
- メール本文が UTF-8 以外でエンコードされている。
正しい Content-Type
Content-Type
節は一般的なメールでは次のようになっている。
Content-Type: text/plain; charset=iso-2022-jp
charset
構文によりメール本文のエンコードを指定する。これが省略された場合、エンコードは US-ASCII
(要するに ASCII 文字)であると仮定される。
なお、charset パラメータが省略された場合は、US-ASCII として取り扱われます。
http://www.mew.org/~kazu/doc/newsletter/3.html
つまり、日本語を使ったメールでは必ず charset
構文を使わないといけない。UTF-8 のメールが文字化けしないのは、MobileMe が優しいだけなのだ。今回文字化けしたメールは郵便局から送られてきており、charset
構文がすっぽり抜けていた。どんなダメシステムを使ってメール配信してるのやら。
Content-Type: text/plain
ほかのメーラーでは
GMail はもっと優しいので、ISO-2022-JP でも Shift_JIS でも EUC-JP でも、何とか読める状態にしてくれる。今回のメールも GMail に転送すると読めた。
iPhone では UTF-8 と ISO-2022-JP の時のみ、メールが文字化けしなかった。MobileMe と iPhone で仕様が違うというのもなんだか変な感じだ。