990202 – Becky!からThunderbird移行後の文字化け解消
数年前にパソコンのメーラーをそれまで使っていたBecky!からThunderbirdに移行した。
先立つこと数年前に職場のメーラーをOutlook ExpressからThunderbirdに移行した際、インターフェースが使いやすかったので、自宅の方も移行することにしたのだった。
Becky!も特段の不都合なく使えていたので、そのまま使い続けてもよかったのだが、職場で使っているものと同じものにしておけば、トラブル時の対応がやりやすいし、職場側にフィードバックすることもできそうだという意味合いもあった。
ところがいざBecky!から過去メールを移植すると、文字化けで読めないメールが多数出てくるありさま。当時それなりにネットとかで調べてみたのだが、ツールとかを使った簡単な解決方法とかはなさそうだったので、それ以上深く調査することはせず、Becky!自体のメールはそのままBecky!上に残して、Thunderbird上に移行された文字化けメールは、いずれ解決方法が見つかるまで放置することにした。
で、それから幾星霜。PCのOSをWindows10にアップグレードした時に新規インストールしたので、アプリも全部入れ直しになったのだが、その時はBecky!環境を再構築しなかった。
過去のメールを見る用事もほとんどなくなっていたので、もういいや、と思ったのだが、そうした時に限って急に過去メールのチェックが必要になったりする。そのたびに文字化けメールを見ながら、どうにかできないものかなぁ。。。と思いつつ半ばあきらめて放置していた。
ある日、同じように過去メールを調べていて、文字化けメールどうにかならないかなぁ、と思っていたら、神様から「やれ!」という声が聞こえたw
なぜか知らないけど、もう一度調べてみようと思ったのだ。
まず、化けているメールの状態は、大まかに、本文か件名のどっちかだけ化けているものと、両方とも化けているものに分けれられる。
それぞれ理由は下記のサイトを参照。
メインマシンをUbuntuに!-Becky!からThunderbirdへ移行(2)-
要するに、送信者側の問題で、メールは主にISO-2022-JP という文字コードが使われるところが、件名・宛先等を含むヘッダ部分に Shift_JIS など別の文字コードが混ざると文字化けするらしい。
この原因は,メールのヘッダで宣言した文字コードと本文の文字コードが異なる場合に起こります.たとえば,メールのヘッダに
Content-Type: text/html; charset=Shift_JIS
とあり,「メールの文字コードはShift-JISですよ」と宣言しておきながら,実際にはメール本文の文字コードがiso-2022-jpな場合です.
多くのメールはShift_JISで送られてきているのですが、本文だけが化ける場合には、本文の文字コードがUTF-8になっていました。
日本のメールサーバーはもっぱらISO-2022-JPを使って送信することが多いらしい。ただ、最近はUTF-8に統一されつつある。
本来、文字コードセットをちゃんと宣言しているにもかかわらず、それ以外の文字コードを件名などの一部で使ったりすると、そりゃどう解釈していいか分からないよね。なので、Thunderbirdとしてはそこは無視しますよ、ということらしい。
さらに厄介なのが、ISO-2022-JPのみならず、SHIFT-JISが使われていたりすることもあるので、一様に治せないよ、ということだ。
なんだい、自分が今まさにハマっていることをThunderbirdさんは放置してる、って事かい。
そう考えると、むかしのメーラーは実に日本的というか気が利いていたんだな。
で、上記の理由を勘案してたどりつた結論は、
要は一式UTF-8に統一しちゃえばいいんでしょ?
である。相変わらず雑だなー。
というわけで、物は試しに文字化けメールを含むフォルダ内のメールを、デスクトップに作ったフォルダにドラッグしてエクスポートする。
ファイル名は化けていないが、中身を開くと相変わらず化けている(ファイル名も化けちゃっているのもある)。
で、書き出したメールを下記ツールを使ってUTF-8に変換する。
対象ファイルをドラッグして、上部の文字コードのところでUTF-8を選択して変換ボタンを押せば変換される。
変換後のファイルをテキストエディタで開いてみると、本文の文字化けはほぼ解消している。ただし、件名は文字化けが解消されていないものもあった。
そのあと、テキストエディタを使って、ヘッダー部分の「charset="iso-2022-jp“」と書いてあるところを、「charset="UTF-8“」に書き換える。
一通ずつやっていたらキリがないので、Grep置換を使ってフォルダ内のすべてのファイルに対して一括で置換をかけた。
そこまでできたら、Thunderbirdに戻してみる。
テスト用に作ったフォルダにドラッグでインポートすると。。。
お、文字化け治った!!
10年近く悶々としていたものが解消されたこの爽快感をどう表現すればよいのでしょう?w
手ごたえありなので、他のフォルダのメールも同様に処理していく。
が、そこはそれ。一筋縄ではいかない。
9割くらいのメールは上記の方法で治ったが、残り1割くらいのメールの文字化けは治らなかった。
ここから先は個別に修正するしかなさそうだ。
こんな風に化けている場合は、上記「charset=」の記述自体が無かったりするパターンが多いようなので、再度該当するメールだけをフォルダに書き出し、化け方に応じて、同様にGrep置換でUTF8かiso-2022-jpかSHIFT-JISなどと明記した後に再度取り込んでみたら、これである程度治った。
この辺はアタりを付けて直してみてもうまくいかないことが多く、トライアンドエラーしながら直した。
最後に、本文は治ったけど、どうしても件名が治らないメールや、本文の文字化けが治った代わりに件名が化けるようになってしまったメールが少量あった。どのcharsetを当てるかトライアンドエラーし続けるのが面倒くさくなって、Becky!環境を復活させて、Becky!側の件名をコピーして、テキストエディタで開いたメールのSubject: 欄に貼って書き換えるという力業を繰り出して治した。
あと、HTML形式で送られてきたメールでHTML部分が文字化けしている、というのが何件かあった。
HTML部分は添付ファイルになっており、ファイルそのものの文字コードセットを添付状態のまま変換かける方法が分からなかったので、これはもう添付ファイルを削除することでおしまいにした。
ま、ほとんど通常のメールをHTML形式で送ってきているようなものばかりだったので。
トライアンドエラーしたメールもなんだかんだ1,000通弱あったので、それなりに骨が折れたが、全体で1万数千通、全部に対してトライアンドエラーすることを考えたら全然余裕で対応できる分量になってくれたので助かった。
以上の格闘をもって、長年気になっていたメールの文字化け修正に成功した。
仕事の合間とかにちょこちょこ対応していたので、半月くらいかかった。。。
かかった時間の4分の1くらいは、過去のメールをチェックしていて、懐かしくなって読みふけっちゃった時間なのはヒミツであるw
当時は頻繁にやり取りしていたのに、すっかり没交渉になってしまった人が沢山いることに気づく。みんな元気しているのかなぁ。声をかけてみたい気もするが、疎遠になっている時間が長すぎて、今更な気もする。
ちなみにメールメッセージ自体の文字コードセットを書き換えてしまっているので、そのメールを相手にまた返信したりした場合の挙動とかは不明。
ま、このご時世、友達や知り合いとのやり取りはもっぱらLineとかだし、PCのメールは使ってないのでさして影響ないからいいか。