思いたって超古いメールをMaildirに突っ込んでみたら文字化けして困った

一度Maildirに落してしまえば検索が容易になるので、古いメール(92年の18きっぷMLのメール)をMaildirにつっこんでみました。

20世紀のメールなので本文EncodeはISO2022-JP。しかもMIME関連のヘッダ等無しです。

こんなんでもちゃんと読めるのかという不安はありましたが、単純にディレクトリ掘ってコピーしたところ、だいたいは読めました。

ただ、こんな感じに間に変な文字が入っちゃうことがありまして、うーん。って感じなんですよね。ちなみにクライアントはThunderbirdです。

mojibakepng

で当該箇所がどうなっているのかと見てみれば

000003e0  70 21 23 1b 28 42 0a 0a  1b 24 42 24 33 1b 28 42  |p!#.(B...$B$3.(B|
000003f0  1b 24 42 24 41 24 69 24  33 24 3d 24 68 24 6d 24  |.$B$A$i$3$=$h$m$|

となっています。ちょっとわかりにくいですが ESC ( B ESC $ B とマルチバイト文字が解除された直後に何も文字がなく再度マルチバイト文字になっています。この場合にunicodeのfffdに変換されてしまうようです。

このような意味ないエスケープシーケンスが有効なのか無効なのか調べるのが面倒なんで、twitterでボソっと呟いたところ次のような回答を頂きました。

府に落ちたところで、perlでセコセコと意味のないシーケンスを除去するスクリプトを作成(単なる置換とも言う)。 変換してからMaildirに入れたところちゃんと読めるようになりました。 それにしても文字コードは奥が深い。

Posted by issei

カテゴリ: 雑記