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

>  encodingのスコープの問題が、使っているモジュール・ライブラリとの関係に
> どのように現れるのか、文字コードをスクリプトの中で変換するような場合にど
> のように影響するのか、検証が必要な気がします。単純ではないですね。また、
> 正規表現の\wがマルチバイト文字にマッチするというのも過去のJPerlスクリプ
> トとの互換性に関しておそらく問題になりますね。JPerlからの移行はそれほど
> 簡単ではない予感がします。

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;
  }
}

 これが動きません。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と仮定している
からですね。

 これはどのようにすれば解決できるのでしょうか。

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

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