- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- Perl/日本語処理/文字コードの宣言 - use utf8, use encoding へ行く。
- 1 (2006-04-26 (水) 00:43:00)
- 2 (2007-09-07 (金) 06:56:20)
- 3 (2009-09-07 (月) 05:19:54)
- 4 (2011-01-07 (金) 05:53:02)
UTF8フラグの宣言
use encodingプラグマ(もしくはuse utf8プラグマ)を使って、そのソースコードがUTF8フラグ付きであること(加えて、そのソースコードがどんな文字コードでかかれているか)を宣言する。
効果
- Perlのソースコード自体の文字列をUTF8フラグ付きにする。
- 標準入力と標準出力を指定した文字コードに変換する。
- その際、入力についてはUTF8フラグを付け、出力についてはUTF8フラグを落とす。
使いどころ
Perlのソースコード内に日本語を書いて、それを加工するような時。 下のプログラムはuse encodingを記述しないと「あ」は表示されず、化ける。
use encoding 'euc-jp'; $text = "あああ"; print substr($text,0,1),"\n";
注意点
- ファイルの入出力については効果がない。それにはuse openなどを使う。
- (標準出力に)print()する文字列はUTF8フラグがあってはならない(Perlがwarningを出す)。そのため、出力時にUTF8を落とす必要がある。
文字コードの変換
ソースコード(EUC) → 標準出力(SJIS)
use encoding 'euc-jp', STDOUT => 'shift_jis'; $text = '花鳥風月'; @chars = split '',$text; foreach $c (@chars){ print $c,"\n"; }
標準入力(EUC) → ソースコード(SJIS) → 標準出力(SJIS)
EUCなターミナルから文字を入力すると、ターミナルにはSJISな文字が帰ってくる。
use encoding 'shiftjis', STDIN=>'euc-jp'; while (<>) { ($char) = split '', $_; print $char,"\n"; }
use utf8
use utf8は、use encoding 'utf8'と同じ意味。