[[Mailman 機種依存文字1]]~ [[Mailman 機種依存文字3]] *Mailman 機種依存文字2 [#a11c289f] この記事は、以下のURLをコピーしています。オリジナルは、さとうふみやす氏のダメ出し日記です↓ http://www.sfo.jp/blog/archives/2007/01/python-japanesenkf-codec-and-mailman.html ===========ここからコピー=========== **Python: 標準の日本語用コーデックを NKF な実装で上書き [#lc5a682d] 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 歴数週間なので、かなり怪しいかもね。 ===========ここまでコピー===========