Perl 5.8では、内部でUTF-8の文字コードを使うように なったが、ファイルがどの文字コードで書かれているのかを きちっと指定しないと、文句を言われることがある。
use utf8;をスクリプトの初めに入れる。こうしておけば、検索の文字として 日本語なども使える。
binmode STDIN, ":utf8"; binmode STDOUT, ":utf8";
open(FH, "<:utf8", $filename);
open(FH, "<:encoding(shiftjis)", $filename);
use utf8; binmode STDIN, ":utf8"; binmode STDOUT, ":utf8"; while(<>){ print "¥t", $_ if /あ/; } print "--- open utf.txt ---¥n"; open(FH, "<:utf8", "utf.txt" ) or die "Cannot open file¥n"; while(<FH>){ print; } close FH; print "--- open sj.txt ---¥n"; open(FH, "<:encoding(shiftjis)", "sj.txt" ) or die "Cannot open file¥n"; while(<FH>){ print; } close FH;
perl utf.pl <utf.txtと実行する。
use encoding 'utf8' STDIN=>'utf8';
を用いると、標準入力がUTF-8で書かれていることがきっちり認識されていない。 特に、頻繁に英文字と日本語が切り替わるようなファイルを 読み込むと、次のようなエラーが出る。
utf8 "¥xE3" does not map to Unicode at bad.pl line 6.