Mailman 機種依存文字1
Mailman 機種依存文字3

Mailman 機種依存文字2

Python: 標準の日本語用コーデックを NKF な実装で上書き

Mailman 環境において、エンコーディング名 (文字セット名) と実際のエンコーディング方式 (文字セット) が異なるメールメッセージ (いわゆる 機種依存文字 が含まれているメール) を受信すると、保存書庫で文字化けしてしまう問題がある。当然そんなメールを送る参加者 (と MUA) が悪いのだが、残念ながらそうも言ってられないので対処してみた。

調べてみると mmjp-users メーリングリストに代表的な対処方法と簡単な比較 が挙げられており、その中でも Mailman の保存書庫が機種依存文字で文字化けする や [mmjp-users 1380] Re: 保存書庫の一部のメールが文字化け とそのリンク先で紹介されている
石本さん式 (要は Python 標準の仕様に厳密なコーデックをルーズな実装のコーデックで上書きして対処する方法) が一番良さげ。ところが、方法を解説している本命のWebページと必要となる PyKF という Python モジュールは、サーバーが死んでいて参照できない。一応 Google のキャッシュや The Internet Archive (http://www.archive.org/) で参照できるが、ふつうの人はそこまで辿りつけないかもしれない。そこで Python の勉強ネタついでに、入手困難な PyKF ではなく NKF (NKF_python) で実装し、より汎用的に使えるよう Python モジュールにしてみることにした。

まずは Python の NKF モジュールをインストールする。ちなみに 2007年1月13日以前のものはオプションの解析処理にバグがあり、 nkf.nkf() に渡す NKF オプションに空白区切りで複数のオプションが含まれており、かつその nkf.nkf() 文が複数回実行される場合、 2回目以降の実行では 2番目以降の NKF オプションが無視される問題がある。つい先日問題を発見し、作者にパッチを送って修正してもらった。

$ tar xzf /path/to/source/nkf207.tgz
$ cd nkf207
$ tar xzf /path/to/source/NKF_python.tgz
$ cd NKF.python
$ python setup.py build
...
$ sudo python setup.py install
...

今回作成した NKF による ISO-2022-JP (もどき), EUC-JP (同), Shift_JIS (同) のコーデックモジュール japanesenkf.py を適当なディレクトリにインストールする (今回は Debian GNU/Linux 4.0 (etch) の Mailman だけで利用するので、 /usr/lib/mailman/pythonlib にした)。

$ sudo cp /path/to/source/japanesenkf.py /Python (Mailman) のモジュール検索ディレクトリ Mailman の設定ファイル mm_cfg.py を開き、モジュールのロードと日本語標準コーデックの上書きを指示する。

...
import japanesenkf
japanesenkf.overrideEncodings()

モジュールと設定を反映するため、 Mailman の qrunner を再起動する。

$ sudo /etc/init.d/mailman restart
...

簡単にテストした限りではちゃんと機能しているみたい。 Python 歴数週間なので、かなり怪しいかもね。


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS