hotmailの昔の送信済みメールを文字化けから救い出す(後編)

この日記は(後編)です.
面白さを損なわないために,前編を先に読むことを,お勧めいたします.


またしても長文を書いてしまいました.

承(続き)

そもそも,「自分だけ」送信済みメールが文字化けしている,というのは考えられない話です.
文字化けの被害を受けたのが自分だけならば,大切なメールとはいえ非常に運が悪かったと諦めがつきます.


ここで,発想を転換して,他の人も文字化けの被害を受けているとすれば,誰かが解決策を見つけているかもしれない
という考えに至りました.
hotmailのヘルプを見たところ,関係のある情報はなさそうでした.
hotmailの問題なので,MSN以外で検索すればいいわけですが,普段使っているGoogleで,
hotmail 文字化け
と入力して検索したところ,
残念ながら,初歩的な質問だったり,UTF未対応ソフトの被害だったりと,関連のある話題ではなさそうです.


hotmail 文字化け 送信済み
というように言葉を追加して検索してやります*1
自分の被害は送信済みメールのみだけだったが,もっと一般的な現象の一部だったという場合を考えると,このように検索語句を増やすことは情報が少なくなり失敗なのですが,今回の場合はそれなりに成功でした.
得た情報は某巨大掲示板の次の一言で要約できました.

85 :名無しさん@お腹いっぱい。:2009/05/03(日) 09:00:59
サポートから返事がきた。

「諦めろ」ということらしい
【以下省略】

http://pc11.2ch.net/test/read.cgi/esite/1240783391/


ここで,自分は……

  1. 素直にあきらめよう
  2. いや,自力で解決する余地がまだある
  3. 最後にサポートを謝らせて憂さ晴らし

自分は心に余裕がある人ではなかったため,
自力で解決しようとして疲れ果てた状態で,前2つの正統派な選択肢を取ることはできません.


hotmailヘルプ内を「文字化け」で検索して唯一ヒットしたトピックの,「解決しない場合」から「サポートに問い合わせ」を選びます.
やりとりを繰り返して最終的に謝らせることを目標としました.


目標の達成のためならば冷静に行動ができました.
問題の詳細には,あくまで,

  • 私が気づかない間にhotmail側からは予想できない操作をしてしまったことが恐らく原因である
  • 文字化けは直すことができる
  • その方法をhotmailに親しんでいない私は知らない

という立場で,冷静に,怒りを完全に抑え記述します.


翌日


カスタマーサポートからの返信が届きました.以下,適宜引用します.

この度は、文字化けが発生していたり、過去のメールが
表示されないなどの現象が発生しているとのご連絡を頂戴し、
お手数をおかけいたしております。

「昔の送信済みメールが文字化けしている」という問題のついでに
昔の送信済みメールがなぜかないことが気になり,あわせて問題に記入していたため,このような返答になったようです.

■ 要因 1. キャッシュデータが破損、蓄積している
 > > 対処法 : 一時ファイル、Cookie を削除する
【中略】
■ 要因 2. コンピュータ環境のセキュリティレベルが影響している
 > > 対処法 : Internet Explorer の設定を調整する 
【中略】

の2つの想定される要因が書かれていました.
まず,その送信済みメールを開いたのはこのパソコンでは最初だったため,要因 1. はありえません.
2. もそもそもFireFoxを使っていたため関係なさそうだったのですが,念のためIEhotmailを開き手順通りするものの何も起こりません.


そもそも,「文字化けが発生していたり」というくだりが要約しすぎであり,
こちらが,送信済みメールだけであり,しかも過去のものに限られることを説明したことを踏まえた回答となっているとは思えませんでした.
また,Internet Explorer 6で作業するようにメールでは求められましたが,最新版は7あるいは8だったはずなので,昔に作られた回答であるとも考えられます.
最初の返信は24時間以内というルールがあるため,問題を要約して考えられる要因をいくつか選択すると「問題への回答」となる仕組みなのでしょう.


つまり,本番は

 問題が改善しない場合は、状況を確認させていただき、
 引き続き対処方法をご案内させていただきたく存じます。
 その際は、文末の【お知らせいただきたい内容】について
 ご記載いただき、ご返信にてお知らせいただけますと幸いです。

に従った時点からということになります.


「お知らせいただきたい内容」に答えるためには,
メール上を右クリックして表示されるhotmailのメニューの「メッセージ ソースの表示」の情報を答える必要がありました.
文字化けしている送信済みメールのメッセージソースには,指示された "Content-Type: text/plain; charset= *** " のセミコロン以降の部分がなかったため,やはり想定外なのでしょう.
また,ソース上も文字化けが発生しており,ブラウザのエンコードの設定を変えても改善されません.
最近の送信済みメールのメッセージソースはBase64エンコードされており,"Content-Type: text/plain; charset= *** "と書かれた行も存在し,メッセージソースの仕様変更が原因となっていると考えられました.


以上の内容をまとめ,これに文字化けしているメールの共通点や発生日時を再び書き加えて返信を行いました.
想定外の問題であることを示せたため「勝ち」がかなり見えます.
このように考えた後,突如,文字化けの修復する方法の1つに思い当たります.

  • ブラウザの文字エンコーディングの変更
  • メールを他に転送し,その先で修復
  • htmlソースの表示
  • hotmailの「メッセージ ソースの表示」機能

のどれもが役に立たなかったように見えました.
しかし,ここまでの試みには漏れがあります.


きっかけは,
「メッセージ ソースの表示」で見えていたものはテキストデータだったのか.
という疑問でした.
デザインも素っ気もないどころか,白地に黒で標準的なフォントが使用されていたため,テキストデータだと思い込んでいたのですが,確認すべきです.


メッセージソースのソースの表示をしてみました.
結果,

<pre>To&#58; ****【個人情報に配慮】****&#64;hotmail.com&#13;&#10;Subject&#58; 
【中略】
Content-Type&#58; text&#47;plain&#13;&#10;&#13;&#10;&#130;&#177;&#130;&#241;&#130;&#201;&#130;&#191;&#130;&#205;&#129;B&#13;&#10;&#13;&#10;
【以下略】

というhtmlソース*2が表示されました.


文字化けはありません.今や完全な情報を手にしています.


&#数値;は数値文字参照などと呼ばれ,Unicodeでの文字番号を利用して1文字を出力するのですが,
「不思議なことに」すべての数値が256未満です.
高鳴る胸を押さえながら,バイナリエディタに,

&#130;&#177;&#130;&#241;……

に対応する16進数を82 B1 82 F1……と打ち込んでいきます.
Shift_JISで表示するように設定していた右枠には2バイト入力するたびに






と表示されました.


勝利です.
もとのメールを復元できています.

Epilogue

その直後,
メッセージソースのhtmlソースを入力すると,数値文字参照の代わりにその1バイトを書き出すプログラムを書いて片付けました.
プログラムを書くのに10分程度かかりましたが,手作業ですべて行うよりははるかに効率的でしょう.


翌日


文字化けからの救出方法が分かり,気分よかった頃,
サポートからの返信がありました.
すっかり忘れていたのですが,解決策を思いつく直前でこちらからメールを送ってしまっていたので当然の結末です.

この度の文字化けの現象に関しまして、
[charset] 項目が表示されないなどの状況から、
メールデータ自体の破損などの問題により発生している可能性がございます。
 
恐れ入りますが、データの破損や欠損による文字化けの場合、
解決策のご提示が困難でございますことを、深くお詫び申し上げます。

今回のメールは全体的に見て,人の手をある程度通して書かれたものだと推測されました.
自分がよい人でなかったばかりに,別の「目標」も達成してしまっていることに心が痛みます.

あとがき

hotmailサポートは何を謝っていたのか:

  • 受信したメールの文字化けに対して一般的にかなり有効であろうcharsetなしでは,失敗しえない復元方法はないということ.
  • (文字化けの原因をデータの破損欠損に求め,)解決策がないであろうこと.

hotmail開発者は何を誤っていたのか:

  • 古いメールのバイト列をそのまま出力すれば,周囲の表示と競合する可能性があるものの,ブラウザのエンコーディングを変更することで文字化けは解消可能だった.
  • しかし,バイト列を(Unicodeを仮定する)数値文字参照に置き換えて表示していたため,エンコーディングを変更しても改善されない「文字化け」が発生した.
  • すべてをhotmail側で行うという発想ではなく,GMailの文字化けの修復のように,各々のブラウザにエンコーディング設定を任せるという選択肢を与えることが必要だった.charsetが保存されていなくても文字化けが直る可能性が存在する.

とはいえ,どちらも現実的には難しい問題なので,勝手に言えることではないことは承知しています.


「文字化けは Unicode の登場でほとんど解決されたかに見えて,実際は,後方互換性を保つための困難がある」
ということを肌で感じられる貴重な体験ができたということですね!

*1:いつの間にかこの日記の前編が上位に来ているようです.それだけもともと情報が少なかったのかもしれません.

*2:実際は改行は全く入っておらず,簡潔に出力された様子が伺われます.preは空白や改行をそのまま表示するタグです.