先日、当方に到達したSpamが以下のようなものでした。

・コードはBig5(繁体中国語)と宣言されている。
・日本語環境で表示させてみると、8bit部分はBig5文字列の特徴を有している。
・その中にHTMLの「𘚟」の形式(数値文字参照)が大量に混ざり込んでいる。

これをどうやって読んだものかと考えました。
そのままWebブラウザに読ませてコード指定すれば簡単なのでしょうが、
安全性を考え、また環境を一時的に変更することの副作用を避けるため、
以下の手順でコード変換しました。

(1)Big5→シフトJISの変換ツール(既存)に喰わせる
(2)シフトJIS→ISO-2022-JPの変換ツール(=nkf)に喰わせる
(3)「数値文字参照」→utf-8の変換ツール(自作※)に喰わせる
(4)「nkf -sW」に喰わせる

※:http://www.lbm.go.jp/toda/library/unixmail.html#htmlcode

シフトJISやEUC-JPをutf-8と混在させると8bit同志で区別がつかないので、
ISO-2022-JPとutf-8が混在した形に持って行ったわけです。
この形なら、nkfが混乱すること無く各々を適切に変換してくれるだろう
と思ったところ、目論見通りでした。
手順(1)(2)では「数値文字参照」を単なる7bit文字列と認識しますし、
手順(3)ではISO-2022-JPを単に「変換対象外の文字列」と認識するので、
何れにおいても、目的以外の部分を勝手に変換されることはありません。

ちなみに、内容は「Big5で記述された日本語」でした。
かな文字の部分が全部「数値文字参照」になっていたというわけです。

#GB2312(簡体中国語)には「かな文字」があるんですが、Big5には無いようです。

最近、メールサーバにSpamフィルタが入って、
かなりの精度でSpamがサーバに留まるようになったんですが、
流石にこれは内容解析ができなかったようです^_^;

                                戸田 孝@滋賀県立琵琶湖博物館
                                 toda@lbm.go.jp