例えば「ニュース」という言葉はだめなようで
if( $Mojiretsu =~ /ニュース/ ){
とやるとエラーが出て止まってしまいます。
エラー内容はこういうのです。↓
Unmatched [ in regex; marked by <-- HERE in m/>ニュー <-- HERE ス</a>/ at Test.pl line 17.
どうやったらエラーを出さずに「ニュース」をパターンマッチさせられるでしょうか?
Shift_JIS バイト列として評価しているために発生しています。
下記のように Shift_JIS バイト列を UTF-8 文字列に decode して評価するようにしたうえ、ソースコードも UTF-8 で保存してください。
例:
use utf8;
use Encode;
(略)
$Mojiretsu = Encode::decode('shiftjis', $Mojiretsu);
if ($Mojiretsu =~ /ニュース/ ){
(略)
}
参考:
スクリプトの文字コードは何になっているでしょうか?
以下のサンプルスクリプトをUTF-8で保存し実行したところ意図通りに動作しました。
#!/usr/bin/perl use strict; use warnings; my $news = 'ニュース'; if ($news =~ /ニュース/) { print "News!!\n"; } else { print "Not match\n"; }
実行結果
C:\>perl -v This is perl, v5.8.8 built for MSWin32-x86-multi-thread C:\>perl test.pl News!!
文字コードはShift-JISです。
検証までして頂いて、ありがとうございました。
m(_"_)m
Shift_JIS バイト列として評価しているために発生しています。
下記のように Shift_JIS バイト列を UTF-8 文字列に decode して評価するようにしたうえ、ソースコードも UTF-8 で保存してください。
例:
use utf8;
use Encode;
(略)
$Mojiretsu = Encode::decode('shiftjis', $Mojiretsu);
if ($Mojiretsu =~ /ニュース/ ){
(略)
}
参考:
内容も対処方法もよくわかりました。
$Mojiretsuには、他のプログラムが出力したファイルから読み込んだ文字列がはいるので、このファイルをUTF-8で吐き出すようにしてもらうのはちょっと難儀だなーと思っていたのですが、教えてもらった方法なら自己解決できそうですね。
ありがとうございました!
内容も対処方法もよくわかりました。
$Mojiretsuには、他のプログラムが出力したファイルから読み込んだ文字列がはいるので、このファイルをUTF-8で吐き出すようにしてもらうのはちょっと難儀だなーと思っていたのですが、教えてもらった方法なら自己解決できそうですね。
ありがとうございました!