Perl での日本語処理 | ホビットの読んだ本

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文字列でなくするように書いてあることが多いですが、これをやるとお化け文字になります。