作者: 藤岡和夫
日時: 2004/6/27(12:44)
On Sun, 27 Jun 2004 11:19:03 +0900
藤岡和夫 <kazuf@...> さんwrote:

> use encoding "shiftjis";
> use LWP::Simple;
> @lines = split(/\n+/,get("http://homepage1.nifty.com/kazuf/renewal_2004_05.html"));
> $pattern = "ソレイユ";
> foreach $line (@lines){
>   if($line =~ /$pattern/){
>     print $line;# 修正済み
>   }
> }
> 
>  これが動きません。JPerlなら、use encodingの行をコメントするだけで動き
> ます。LWP::Simpleのgetで受け取った文字列がshiftjis文字列として認識されな
> いみたい・・・エラーメッセージが出ないのは、if文の条件式がエラーになって
> いるから。if文と$patternの行をコメントにして単に出力すると、
> 
> "\x{0082}" does not map to shiftjis at jplwp.pl line 7.
> "\x{00ab}" does not map to shiftjis at jplwp.pl line 7.
> 
> このようなエラーになるのは、入力している文字コードをUTF-8と仮定している
> からですね。
> 
>  これはどのようにすれば解決できるのでしょうか。

 Perl5.8のSimple.pmの最初のほうに

use encoding "shiftjis";

の行を追加すると、意図どおりに動くようになりました(^^;)しかし、この方法
では、文字コードの変化に対応できない。

>  最終的に念頭に置いているのは、入力するデータは受け取って解析して、例え
> ば、XMLのencoding属性から文字コードを取得して、shiftjisに変換して出力す
> るというようなことです。

 こちらが問題ですね。

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