iPhone間の新しい文字化け「兄化け」

  • iPhone間の新しい文字化けパターンが発見されたのでメモ*1。この少なくとも3つのダメな仕様が重なって発生する文字化けは、発見者によって「兄化け」と命名された*2
  • 「兄化け」は、兄がSoftBankまたはauiPhoneでメッセージアプリを、妹がiPhoneのメールアプリでdocomo.ne.jpアドレスを使っている場合に発生する。兄が絵文字入りのメールを送信すると、妹の環境では絵文字が豆腐に化け、それを引用して返信すると、今度は兄の側でメッセージ全文が化ける。


  • 以下、この文字化けの理屈について。兄のメッセージアプリは、絵文字入りのメッセージをUTF-8で送信。キャリアの送信側のサーバが、これをドコモのShift_JISに変換する。しかし、妹のiPhoneのメールアプリはドコモのShift_JISに対応していないので、ドコモの絵文字を単に「Shift_JISの未定義領域の文字」として機械的な計算でUnicodeの私用領域にマッピングし、豆腐として表示する。
  • 妹がこの豆腐入りのメッセージを引用して返信すると、charset=CP932になる。このメールアプリの仕様はまったく謎だが、Shift_JISを解釈(デコード)するときと同じロジックで符号化(エンコード)しているので、来たときと同じ符号にもどり、この後うまくいけば、兄の環境では元の絵文字が表示される可能性もある*3
  • しかし、ドコモの送信側のサーバはcharset=CP932をスルー。結局このまま兄のもとに届く。メッセージアプリはCP932を理解できず、UTF-8として解釈する。この結果、(ASCIIに含まれる文字以外は)すべての文字が化けて表示される。
  • 「兄化け」を防ぐためには、「キャリアのメールアドレスを使わない」というのがいちばんシンプルな方法だが、妹が兄に返信する際、引用文中の豆腐を消しておくという対処法によって、兄側の文字化けを防ぐことはできる。

*1:akane_nekoさんにご協力いただいてテストしました。ありがとうございます!

*2:命名の背景などは省略。……と書いたのですが、その後@monokanoさんがまとめてくれました。ありがとうございます! http://togetter.com/li/580702

*3:図の例では、ドコモのShift_JISにおけるペンギンの絵文字(0xF9F5)がメールアプリではUnicodeの私用領域の文字(U+E750)として表示され、返信のメッセージではこれが再び0xF9F5になっている。