2003年10月22日 (水)

XML/RSS Feed ファイルの文字化けを解消する Perl スクリプト

iBlog で出力した XML/RSS Feed ファイル(rss.xml)を iBlog で参照しても文字化けしないようにする Perl スクリプトを作ってみた。
(2003 11/05)このスクリプトは iblogPatcher に統合されました。

iBlog が出力する XML/RSS Feed ファイル(rss.xml) は日本語が実体参照になっている。また公開日(pubDate 要素)の曜日の値は Shift_JIS になっている一方、XML ファイルとしてのエンコードは iso-8859-1 (ラテン文字) となっている。まだ iBlog が実体参照の文字を正しく解釈してくれればよいのだが、エントリーのタイトル部分ではそうなっていない。

日本語と思しき実体参照を UTF-8 の文字に変換し、rss.xml のエンコードを UTF-8 にしてしまえば iBlog で参照してもエントリーのタイトルは見えるはずだと考えやってみたところ見事に成功した。実体参照を手で UTF-8 の文字に変換するのは面倒だったので Perl スクリプトを作成してやってみた。

当初はこのスクリプトは実験目的だったので、UTF-8 に限らず EUC-JP や Shift_JIS にも変換できたのだが、どうもそれでは iBlog が読み取れなくなってしまう。それで UTF-8 限定にした。ついでに Pod によってマニュアルも書いて、デバッグ用のコードはオプションで有効になるようにしリリース用を作成した。

私の blog では要旨だけ付けて本文は付けていないから、まだテストが十分とは言えないのでβ版として公開する。私が十分だと思う期間を経て(気が向いたときともいう)特に問題の報告がなければ正式版としてリリースする。とはいえ、自分が使うスクリプトを公開しているだけなのでリリースされてもβ版のままでも私自身には影響がないのだが、きっと利用してくれる人の安心感や、自分が持っているバージョンが改良されたことの目安になると思う。

といっておきながら、既に問題点が一つ見つかっている。それは、エントリーのタイトルに改行が入って iBlog で見ると二行目以降が見えないという問題だ。これは元の iBlog が出力する XML/RSS Feed ファイルに既に改行が入っているためで、このスクリプトのバグではない。このスクリプトを使えば iBlog が出力する XHTML ファイルも実体参照をなくして UTF-8 に変換できる(と思う)。これのためにタイトルの改行を補正することは控えた。なぜなら XML/RSS Feed ファイルにあまりにも特化した処理で、汎用性を欠いてしまうからだ。

利用環境には Perl 5.6.X が入っていること、Perl のモジュールとして Jcode と Jcode::Unicode が入っていることの二点が必要である。私は Perl をよく使うので Jcode 関連がもともと Mac OS X にあったのか後から入れたのか失念してしまった。もしなかったら自分で入れてほしい。

スクリプト: http://homepage.mac.com/yuji_okamura/.Public/iBlog/iblogConv.pl.sit
マニュアル: http://homepage.mac.com/yuji_okamura/.Public/iBlog/iblogConv.html

これをプレビューされた blog のファイルに使わない方がいいだろう。というのは、プレビュー段階では置換できない REPLACE があり、それは公開される時に置換されるからだ。実際に置換後の値に Shift_JIS コードが使用されるものがあり、ファイルのエンコーディングがチグハグになってしまう。

(2003 10/23)
ファイル名からそのファイルのための特殊処理のサブルーチンへの対応を外部ファイルで指定できるようにすれば、汎用性を維持した上で iBlog の不具合を補正するスクリプトになるということに気が付いた。皆が使いやすいように File::Find モジュールを利用して指定ディレクトリ以下を巡回して変換するようにもしたいし。ラッパーコマンドを別に用意した方がいいかもしれない。

Posted: 14:17    | Comment | Trackback


以下、類似エントリです。