docMM

<< 2014年12月 >>

123456
78910111213
14151617181920
21222324252627
28293031

docMMさんの日記

(Web全体に公開)

2014年
12月19日
10:33

perl苦闘日記(3)~use utf8

タグ : perl
ファイルから文字列を読み込んだ場合は、decodeを使ってunicodeに変換すればよいことは前回書いた。
では、programの中に文字を書きたい場合はどうすればいいか。

my $s = "黒";
if( $s =~ /黒/) {print " black";}

これはうまく動くが

my $s = <DATA>;
if( $s =~ /黒/) {print " black";}

これはうまく行く場合と行かない場合がある。
これはprogram内に書かれた”黒”という文字とファイルに書かれた文字がどんな文字コードで表記されているのかに起因する。
Programもファイルも同じ文字コードで書かれていれば思ったとおりに動いてくれるが、一方がShift-JISで、一方がUTF-8だったりするとアウトである。

この問題を解決するためには冒頭に書いた

use utf8;

というおまじないを書くとうまくいく。
このおまじないは文字が現れるとそれを'UTF-8'コードで書かれたものと認識し、自動的に'unicode'に変換してくれるありがたい関数である。

use utf8;

my $s = decode('UTF-8',<DATA>);
if( $s =~ /黒/) {print " black";}



my $s = decode('UTF-8',<DATA>);
my $t = decode('UTF-8',"黒");
if( $s =~ /$t/) {print " black";}

とは同じ意味である。

もちろん、use utf8 と書きながらprogramをshift-jisで書いたらアウト。使っているテキストエディタがどの文字コードを使っているか気をつけないといけない。
ぃーね! (1) えどわーど 
棋譜作成
: