ほぼ雑記的メモ
一度Maildirに落してしまえば検索が容易になるので、古いメール(92年の18きっぷMLのメール)をMaildirにつっこんでみました。
20世紀のメールなので本文EncodeはISO2022-JP。しかもMIME関連のヘッダ等無しです。
こんなんでもちゃんと読めるのかという不安はありましたが、単純にディレクトリ掘ってコピーしたところ、だいたいは読めました。
ただ、こんな感じに間に変な文字が入っちゃうことがありまして、うーん。って感じなんですよね。ちなみにクライアントはThunderbirdです。
で当該箇所がどうなっているのかと見てみれば
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に変換されてしまうようです。
ESC ( B ESC $ B
このような意味ないエスケープシーケンスが有効なのか無効なのか調べるのが面倒なんで、twitterでボソっと呟いたところ次のような回答を頂きました。
RFC1468を見直して見てたけど、single-byte-segment = single-byte-seq 1*single-byte-chardouble-byte-segment = double-byte-seq 1*( one-of-94 one-of-94 )segment = single-byte-segment / double-byte-segmentとかやって、*segmentという使い方。終端は別途定義しています。なので違反かと。 — FUTATSUKI Yasuhito (@y_futatuki) May 7, 2019
RFC1468を見直して見てたけど、single-byte-segment = single-byte-seq 1*single-byte-chardouble-byte-segment = double-byte-seq 1*( one-of-94 one-of-94 )segment = single-byte-segment / double-byte-segmentとかやって、*segmentという使い方。終端は別途定義しています。なので違反かと。
府に落ちたところで、perlでセコセコと意味のないシーケンスを除去するスクリプトを作成(単なる置換とも言う)。 変換してからMaildirに入れたところちゃんと読めるようになりました。 それにしても文字コードは奥が深い。
Powered by Red Leaf ( Rev. c78c769f2 ), © Issei Numata, 2007-2021