[IT小話-02] Becky!からThunderbird移行後の文字化け解消

数年前にパソコンのメーラーを、それまで使っていたBecky!からThunderbirdに移行した。それに先立つこと数年前に職場のメーラーをOutlook ExpressからThunderbirdに移行した際、インターフェースが使いやすかったので、この機会に乗じて自宅の方も移行することにしたのだった。

Becky!は特段の不都合なく使えていたので、そのまま使い続けてもよかったのだが、職場で使っているものと同じものにしておけば、トラブル時の対応がやりやすいし、職場側にフィードバックすることもできそうだ、という意味合いもあった。

Image202112_01

ところがいざBecky!から過去メールをインポートしてみたら、文字化けで読めないメールが多数出てくるありさま。当時それなりにネットとかで調べてみたのだが、ツールとかを使った簡単な解決方法とかはなさそうだったので、それ以上深く調査することはせず、Becky!自体のメールはそのままBecky!上に残して、Thunderbird上に移行された文字化けメールは、いずれ解決方法が見つかるまで放置することにした。

で、それから幾星霜。PCのOSをWindows10にアップグレードする時に、一度新規インストールすることにしたので、アプリも全部入れ直しになったのだが、その時はBecky!環境を再構築しなかった。過去のメールを見る用事もほとんどなくなっていたので、もういいやと思ったのだが、そうした時に限って急に過去メールのチェックが必要になったりする。そのたびに文字化けメールを見ながら、どうにかできないものかなぁと思いつつ、半ば諦めて放置していた。


そんなある日、同じように過去メールを調べていて、文字化けメールどうにかならないかなぁと思っていたら、神様から「やれ!」という声が聞こえたw なぜか知らないけど、もう一度調べてみようと思ったのだ。

化けているメールの状態は、大まかに、本文か件名のどっちかだけ化けているものと、両方とも化けているものに分けられる。それぞれ理由は下記のサイトを参照。

メインマシンをUbuntuに!-Becky!からThunderbirdへ移行(2)-

要するに、送信者側の問題で、メールは主にISO-2022-JP という文字コードが使われるところが、件名・宛先等を含むヘッダ部分に Shift_JIS など別の文字コードが混ざると文字化けするらしい。

Thunderbirdで文字化けを直す

この原因は,メールのヘッダで宣言した文字コードと本文の文字コードが異なる場合に起こります.たとえば,メールのヘッダに

Content-Type: text/html; charset=Shift_JIS

とあり,「メールの文字コードはShift-JISですよ」と宣言しておきながら,実際にはメール本文の文字コードがiso-2022-jpな場合です.

Thunderbirdでメールの文字化けを解消する

多くのメールはShift_JISで送られてきているのですが、本文だけが化ける場合には、本文の文字コードがUTF-8になっていました。

日本のメールサーバーはもっぱらISO-2022-JPを使って送信することが多いらしい。ところが、そうやって宣言しているくせに、件名で違う文字コードセットを使って送受信しているらしいのだ。そりゃ解釈できるわけがない。だから、Thunderbirdとしてはそこは無視しますよということらしい。

さらに厄介なのが、当時のメールサーバーではISO-2022-JPのみならず、Shift_JISが使われていたりすることもあるので、一様に直せないらしい。なんだい、自分が今まさにハマっていることをThunderbirdさんは放置してるってことかい。そう考えると、むかしのメーラーは実に日本的というか気が利いていたんだな。

で、上記の理由を勘案してたどりついた結論は、

要は一式UTF-8に統一しちゃえばいいんでしょ?

である。相変わらず雑だなー。

というわけで、ものは試しに文字化けメールを含むフォルダ内のメールを、デスクトップに作ったフォルダにドラッグしてエクスポートする。

Image202112_02

エクスポートしたファイル名は化けていないが、中身を開くと相変わらず化けている(ファイル名も化けちゃっているのもある)。

で、書き出したメールを下記ツールを使ってUTF-8に変換する。

KanjiTranslator 1.6

対象ファイルをドラッグして、上部の文字コードのところでUTF-8を選択して変換ボタンを押せば変換される。変換後のファイルをテキストエディタで開いてみると、本文の文字化けはほぼ解消している。ただし、件名は文字化けが解消されていないものもあった。

そのあとテキストエディタを使って、ヘッダー部分の「charset="iso-2022-jp“」と書いてあるところを、「charset="UTF-8“」に書き換える。一通ずつやっていたらキリがないので、Grep置換を使ってフォルダ内のすべてのファイルに対して一括で置換をかけた。

そこまでできたら、Thunderbirdに戻してみる。テスト用に作ったフォルダにドラッグでインポートすると・・・。

お、文字化け直った!!

10年近く悶々としていたものが解消されたこの爽快感をどう表現すればよいのでしょう?w

手ごたえありなので、他のフォルダのメールも同様に処理していった。が、そこはそれ。一筋縄ではいかない。9割くらいのメールは上記の方法で直ったが、残り1割くらいのメールの文字化けは直らなかった。ここから先は個別に修正するしかなさそうだ。

Image202112_04

こんな風に化けている場合は、上記「charset=」の記述自体が無かったりするパターンが多いようなので、再度該当するメールだけをフォルダに書き出し、化け方に応じて、同様にGrep置換でUTF-8かiso-2022-jpかSヒft_JISなどと明記した後に再度取り込んでみたら、これである程度直った。この辺はアタりを付けて直してみてもうまくいかないことが多く、トライアンドエラーしながら直した。


最後に、本文は直ったけど、どうしても件名が直らないメールや、本文の文字化けが直った代わりに件名が化けるようになってしまったメールが少量あった。どのcharsetを当てるかトライアンドエラーし続けるのが面倒くさくなってきたので、Becky!環境を復活させて、Becky!側の件名をコピーして、テキストエディタで開いたメールのSubject: 欄に貼って書き換えるという力業を繰り出して直した。

あと、HTML形式で送られてきたメールでHTML部分が文字化けしているというのが何件かあった。HTML部分は添付ファイルになっており、そのファイルの文字コードセットを、添付状態のまま変換かける方法が分からなかったので、これはもう添付ファイルを削除することでおしまいにした。ま、ほぼ通常のメールをHTML形式で送ってきているようなものばかりだったので。

トライアンドエラーしたメールも、なんだかんだ1,000通弱あったので、それなりに骨が折れたが、全体で1万数千通、全部に対してトライアンドエラーすることを考えたら、全然余裕で対応できる分量になってくれたので助かった。

Image202112_05

以上の格闘をもって、長年気になっていたメールの文字化け修正に成功した。仕事の合間とかにちょこちょこ対応していたので、半月くらいかかったが・・・。かかった時間の4分の1くらいは、過去のメールをチェックしていて、懐かしくなって読みふけっちゃった時間なのはヒミツであるw

当時は頻繁にやり取りしていたのに、すっかり没交渉になってしまった人が沢山いることに気づく。みんな元気しているのかなぁ。声をかけてみたい気もするが、疎遠になっている時間が長すぎて今更な気もする。

ちなみにメールメッセージ自体の文字コードセットを書き換えてしまっているので、そのメールを相手にまた返信したりした場合の挙動とかは不明。まぁこのご時世、友達や知り合いとのやり取りはもっぱらLineとかだし、PCのメールは使ってないのでさして影響ないからいいか。

Posted by gen_charly