iRSSの日記

はてなダイアリーiRSSの日記の続き

UTF-8がからむ文字化け解決

http://www.pure.ne.jp/~learner/program/Perl_unicode.html#use_utf8
Perl 5.8 以降においての Unicode 文字列の扱い方 : NDO::Weblog
のサイトのみなさまの、記述を参考にして、mag2rss.cgiの文字化け問題は解消しました。
ソース内で、eucソースコード内でuse utf8;というのを、適当に記述していたのですが、これがまずひとつ問題でした。

このプラグマは、そもそも、互換性のための工夫です。Perl 5.6未満のバージョンでは、ソースコード中の恣意的なバイト列を許していました、ですが、将来、ソーステキストに、UTF-8 エンコーディングを標準化したいと思っています。Perl に script が UTF-8 で書かれているということを教えることの他に、このプラグマを使ってはいけません。下に書かれている、utf8のユーティリティ関数は、それ自身の目的で有益です。それらは、"プラグマ的な"効果の部分ではまったくありません

ということで、eucソースコードで、use utf8をしてしまったおかげで、どうも不本意な動きになっていたようです。詳細は、まだ解明できていませんが....


現状の動きの整理です。
XML::RSS->add_itemのときセットされる文字列ははUTF-8 flagなしとする。
XML::RSS->save($cachefile);を
XML::RSS->parsefile($cachefile);のように読み込むと、取り込んだdescription等の項目はUTF-8フラグが付与されている。
よって、再度、XML::RSS->add_itemするときは、UTF-8 flagをはずす必要がある。

書くとき、はずしていても、読み込むとついちゃうことを考慮して、文字化けせずにキャッシュで切るようになりました。

めでたし!

以下のURLでまぐまぐ - 結城浩の『Perlクイズ』 -のRSSを取得できます
http://rss.rdy.jp/mag2rss.cgi?id=0000015670&s=237

このメルマガは、いつも、以下のように始まっています。

===========================================================
結城浩の『Perlクイズ』2004-06-18 No.0087
http://www.hyuki.com/pq/
===========================================================
■今日の一言

                                                                                                                    • -

こんにちは、結城です。

クイズを通してPerlを学ぶメールマガジンPerlクイズ』をお送りします。
またまた、出題直後にたくさんの解答をいただきました。
みなさん、ありがとうございます。(^_^)

mag2rss.cgiのsオプションで、切り出し位置を237文字目からにしています。
これによって、RSSのDiscriptionには、

>-こんにちは、結城です。クイズを通してPerlを学ぶメールマガジンPerlクイズ』をお送りします。またまた、出題直後にたくさんの解答をいただきました。みなさん、ありがとうございます。(^_^)この問題は同値関係を求めているわけですけれど、頭で想像するほど簡単にはいかない

以上のように、定型のヘッダが省略されています。