== 日本語を正確に処理する方法 == : 日本語(マルチバイト文字)をPerlで正確に処理するためには'''Encodeモジュール'''を使用すると良い : ※ マルチバイト文字:2バイト以上のデータで表現される文字の事であり、ひらがなや漢字などの全角文字が該当する === プログラムのソース以外(外部)から入力された文字列に対する処理 === * 外部から入力される文字列には以下のような場合が該当する コマンドライン引数から得られた文字列 ファイルから読み込まれた文字列 標準入力によって得られた文字列 * このような文字列にはEncodeモジュールのdecode関数を使用し、Perlの内部表現へ変換すると良い : → 正規表現などで文字列を正確に扱うことが可能になる * decode関数によって変換された文字列を外部に出力する際は、Encodeモジュールのencode関数で再変換する必要がある === プログラム例 === use Encode qw/encode decode/; # Encodeモジュールの使用宣言 # Encodeモジュールのencode関数:外部へ出力する文字列はエンコード # Encodeモジュールのdecode関数:プログラム内で扱う文字列はデコード my $char = shift; # 外部からの入力(コマンドライン引数)を格納 $char = decode('UTF-8', $char); # 文字コードがUTF-8である文字列を内部表現に変換($charがUTF-8でなければならない) $char = encode('UTF-8', $char); # Perlの内部表現をUTF-8の文字列に変換 === decode関数を使用する際の注意 === * UTF-8フラグが付いている文字列に対してはデコード処理を行うことができない(エラーが出る) * UTF-8フラグの有無は'''utf8::is_utf8関数'''によって判断できる * UTF-8フラグが立っている文字列の内部表現はUTF-8となる(decode関数を使用して変更する必要がない) === その他 === * プログラムのソースコードと同じ文字コードのプラグマを有効にすると良い(ソースコードがUTF-8の場合はUTF-8プラグマを有効にする) ## utf8モジュールの使用宣言 use utf8; # utf8プラグマを有効にする(ソースコードに書かれたUTF-8バイト文字列を内部文字列に変換) === 参考サイト === * [http://d.hatena.ne.jp/perlcodesample/20091118/1246679588 Encode - 日本語などのマルチバイト文字列を適切に処理する / Perlモジュール徹底解説] * [http://www.rwds.net/kuroita/program/Perl_unicode.html Perl 5.8.x Unicode関連] * [http://d.hatena.ne.jp/dayflower/20080219/1203493616 UTF8 フラグあれこれ] [[Category:三ノ宮|ぱーるめも]] |