MobileMe で charset 指定のないメールが文字化けする件


100830-0001.png

MobileMe を使っていると、いくつかのメールが文字化けして届くことに気づいた。調べてみると、次の条件が重なった場合に化けるようだ。

  1. メールヘッダの Content-Type 節において charset が指定されていない。
  2. メール本文に ASCII 文字以外が使用されている。
  3. メール本文が 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

ほかのメーラーでは

100830-0002.png

GMail はもっと優しいので、ISO-2022-JP でも Shift_JIS でも EUC-JP でも、何とか読める状態にしてくれる。今回のメールも GMail に転送すると読めた。

iPhone では UTF-8 と ISO-2022-JP の時のみ、メールが文字化けしなかった。MobileMe と iPhone で仕様が違うというのもなんだか変な感じだ。

コメントを残す