Perlの文字コード変換の話 其の弐
○ use utf8 プラグマを用いた場合の挙動
use utf8 プラグマを用いた場合、次のような挙動をする。
- ソースコードに含まれている定数文字列にutf8フラグを立てる
- PerlIO レイヤは、*何もしない*
- 変数にマルチバイト文字が使える
三番目の変数にマルチバイト文字が使えるってのは、ネタに近いのでスルー
utf8 フラグとPerlIOレイヤは、Perl 5.8.*以降からは超重要な概念なので、後述する
○ utf8 フラグ
Perl 5.6 以前のバージョンでは、すべての文字列はバイトの並びとして扱われていたが、
5.8.* 以降では、バイトの並びと文字列は区別されるようになった。
内部的に文字コードがUnicodeとして扱われているため、文字列データを示すフラグを
utf8フラグと呼ぶ。
データが、utf8フラグを持つか判定するためには、Encodeモジュールに含まれている
Encode::is_utf8() フラグを用いる。
サンプルとして、以下のコードを挙げる
use utf8;
binmode( STDOUT, ':encoding(shiftjis)' );if( Encode::is_utf8( "ほげほげ" ) ){
print "utf8 on\n";
}else{
print "utf8 off\n";
}
結果として、
utf8 on
が得られる。
ここでコードはutf-8で記述されていること
さて、 use utf8 プラグマが指定されていないときの挙動はこれとは異なり、プラグマ部分を
コメントアウトした場合には、次の結果となる
utf 8 off