Perl での日本語処理
Perlで、utf-8の日本語を扱うにあたって、いろいろトラブったので覚書にまとめました。
入力した後に必ず、
utf8::decode($line);
をやればUTF-8文字列になるとありますが、開けるときに、
open(IN, "<:utf8", "in.txt");
とやった場合は不要でした。
また、そこで入力した文字列を、
&Jcode::convert(\$line, "utf8", "utf8");
なんてコード変換やると、どもうUTF-8文字列でなくなるみたいなので、
utf8::decode($line);
をやり直す必要があります。Jcode.pmが古い関数だから?
逆にいうと、入力して、置換とか処理する前に、コード変換する場合は、
utf8::decode($line);
はそのあと一回でいいです。
この効果はPerl標準のsplitなんて関数では発生しませんでした。
また、置換とか判定、例えば、下記のようなコードを書く前には、use utf8が必要。
use utf8;
if ($line =~ /<タイトル>(.*)</i) {
出力時には、
utf8::encode($line);
とやって、UTF-8文字列でなくするように書いてあることが多いですが、これをやるとお化け文字になります。