code up

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

iPhoneで文字化けしたメールを1文字だけ救出した

iPhoneのメールが文字化けして、なんとか『帰』という文字だけ抽出できた、という話。

私[ソフトバンクiPhone-iOS4.3.3]のGmailアカウント(Gmail設定)から相手[香港iPhone4-iOS5.0.1]のGmailアカウント(Exchange設定)にメールを送った。相手は返事を送ってきたのだが、そのメールが文字化けしてた。ちょうど相手は飛行機に乗ってる時間だったので、なんとかその文字化けを解読しようとした結果をまとめる。

『帰』という文字を見つけた

文字化けしたメールはGmailに届いていたので、Thunderbird等のIMAP対応のメールソフトか、Gmail(ブラウザ経由)で解決する。

* 文字化け全てがこれで解決できるわけではないです。

Thunderbirdの場合はF10キーなどを押してメニューバーを出し、『表示』→『文字エンコーディング』→『日本語 (Shift_JIS)』と選ぶ。

そうするとほとんどは見えない文字のままだが、今回『帰』の文字だけが確認できた。

Gmail(ブラウザアクセス)の場合、メール本文の右上にある『その他』のアイコンを押すと『文字化けを修復』という項目があるのでクリックする。

新しいウィンドウでメールのソースが見れるので、後は開いたウィンドウで、F10キーなどを押してメニューバーを出し、『表示』→『文字エンコーディング』→『日本語 (Shift_JIS)』と選ぶ(Firefoxの場合)。Chromeの場合は右上にあるボルトをしめるやつ(レンチ?)をクリックして『ツール』→『エンコード』→『日本語 (Shift_JIS)』。IE9だとF10でメニューバー→『表示』→『エンコード』→『その他』→『日本語(シフトJIS)』。

相手が送った内容であるが、相手の送信メールボックスでも文字化けが発生していて正確には思い出せないらしいが、『バスで帰る』とかなんとかを書いていたとのことであった。

そもそも文字化けって

iPhoneに限らず、パソコンが外部と通信するようになってから根強く残っている問題である。結局は文字セットと文字エンコーディングとフォントの組み合わせが悪いだけなのだが、いつまでも古い規格が残り、統一された環境に移行できていないのが厄介なのである。

絵文字が最たる例で、各キャリアが勝手に拡張した結果、多くの開発者が苦労を背負ってきたのではなかろうか。

文字化け

私の場合、iPhoneのメールアプリ同士で文字化けというのは初めての経験だった。

アップルのサポートサイトで文字化けについて検索すると、iOS5についての文字化けの問題は見つからず、古いiPhone(auとのやりとりで文字化けする, iPhone2.1)やSMS,iMessage(iPhone:SMS メッセージがほかのデバイスで正しく表示されないことがある)、絵文字関連(iOS:絵文字について, iOS:絵文字に関する問題のトラブルシューティング)が引っかかる。iPhone同士のメールで文字化けというのは報告されていなかった。

今回のメールに絵文字は含んでいない。ただ、怪しいのは『~』(波ダッシュ・全角チルダ問題)を含んでいたこと。意識して使わないようにしていたのだが、使ってしまったのが原因だったのかもしれない。

こういったUnicode周りのベンダ依存の文字については日本語のUnicodeベンダ依存文字表 (http://www.ingrid.org/java/i18n/unicode.html)を参考にしていたのだが、ドメインが売りに出ていた(-_-;。仕方ないので、2011年7月のアーカイブInternet Archiveからお借りする。

Unicode6

AppleはiOS5でUnicodeのバージョン6(ISO/IEC 10646:2010)に対応させた。これにより従来はソフトバンクのメールの時しか使えなかった絵文字がどこでも使えるようになった。若干使えなくなった絵文字とかもあるようが。

同時に、今まで問題なく絵文字を使えていた香港iPhoneでiOS5にあげた途端、絵文字が結構な頻度で文字化けしているとのこと。

その時調べた結果は、香港で販売されていたiPhone(末尾がJ以外の端末)はShift_JISの絵文字を処理しないように施している気がしているのだが十分な情報が得られていない。

ソフトバンクiPhone4(iOS5.0.1)で絵文字が文字化けしているという話は私の周りでは聞かれないので、香港iPhoneが怪しい。そろそろ公開されるiOS5.1で修正されていればよいのだが。

『帰』という文字を見つけた (もう少し細かい解説)

私は写真を撮りiPhone(iOS4.3.3)の写真アプリでGmailアカウントから相手(iOS5.0.1)のGmailアカウントにメールを送った。その中には『~』が含まれていた。

ちなみにGmailの『送信メールのエンコード:』設定は『送信メールにデフォルトのテキスト エンコードを使用する』となっている。確認していないがおそらく相手もそうだろう。

* この設定を『送信メールに Unicode (UTF-8) エンコードを使用する』とし、本文にUnicodeの空白(0xA0)を署名として加える事で強制的にUTF-8でメールを送ることができるが、デメリットもあるため(utf-8のメールが読めない人も仕事関係だとまだいるため)設定していない。

送ったメールをメールボックスで見ると文字化けしていない。ヘッダを見るとiso-2022-jpで送られていた。

相手のGmailアカウントから返信されたメール。ちなみにタイトルもUTF-8でエンコードされていたがこちらは文字化けしていなかった。

ヘッダを見る限り、本文もUTF-8の文章をbase64でエンコードしているらしいのだが、なぜかShift_JISで復元すると一部の文字が読めるという状態であった。

『帰』はUTF-8で0xe5b8b0、Shift_JISで0x8b41と全く異なっている(2進数にしても重複しない)ので、たまたま文字コードがヒットしたのではなく、iPhoneが変換処理の過程で(~があったからか)誤解を起こしておかしな動きをしたのであろう。強制的にUTF-8にしなくても解決して欲しいところです。

また本文全体をbase64でデコードし、それを16進数で出力(このサイトが便利(データ変換ツール)、あとはここ(Base 64 Decoder)とか)すると0xefbfbdというコードが多いことに気づくだろう。これはUnicode・UTF-16(ビッグエンディアン; Big Endian)では、\uFFFD(REPLACEMENT CHARACTER)を表し、つまりは『不明・もしくは印刷不可な文字』である。Javaで言うところの『?』(0x3F)である。つまり不可逆で、元の文字はどうやっても戻せない、ということである。今回の場合送った相手も何を書いたか覚えていないため、正確な文章は復元できず闇の中に沈んでしまったのです。

と、結局は『帰』ることを伝えるメールだと分かり、残りの文字は復元できないが、一安心だった。ということである。

関連記事
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。