作者: 藤岡和夫
日時: 2005/9/04(01:12)
On Sun, 04 Sep 2005 00:27:17 +0900
KIMURA Koichi <kbk@...> さんwrote:

> use しているモジュールがuse encodingの影響を受けているという
> ことはないでしょうか? 各モジュールをuseした後でuse encodiing
> してみたらどうでしょう? かわんないか。Unicode::Japaneseは
> 内部で use byte してるみたいですし。
> 
> 0x8dで始まるバイト列というとShift_JISっぽいですけどね。

 コメントありがとうございます。

 モジュールの順序はおっしゃるように変えてみましたが、現象は変わりません
でした。

 スクリプトでエラーが発生するところは、LWP::UserAgentのgetメソッドで、
RSSファイルを取得して、パターンマッチングで解析を始めようとしているとこ
ろなんです。encodingの問題が起きているのは間違いないのじゃないかと思いま
すね。jperlでもロジック的に多少無理があるんじゃないかという部分なんです。
実用的には動いているのですが(^^;)というのは、文字コードが何が来るのかわ
からないからですね。文字コードの自動判定は難しい場合が多いので使っていな
いというか、使えないので、XMLのencoding属性からパターンマッチで文字コー
ドを取得する処理にしているのですが。それが問題になって現れているのかもし
れません。実際に試している私のサイトのRSSはUTF-8になっています。従って、
use encoding 'Shift_JIS'下で、UTF-8文字列に対して、パターンマッチを適用
しようとすることになります。マッチさせる文字列は文字列の先頭にあり、ascii
文字列なので、jperlでは問題にならないと思われますが・・・

 Perl5.8の文字列の取り扱いは私はまだよくわかっていないので、getメソッド
で取得したRSSファイルはどのようになっているのかも確認してみる必要がある
かもしれません。

藤岡 和夫
kazuf@...
TS Networkのために http://homepage1.nifty.com/kazuf/