- 追加された行はこの色です。
- 削除された行はこの色です。
* UTF8フラグの宣言 [#b8e132f9]
* 文字コードの宣言 - use utf8, use encoding[#b8e132f9]
use encodingプラグマ(もしくはuse utf8プラグマ)を使って、そのソースコードがUTF8フラグ付きであること(加えて、そのソースコードがどんな文字コードでかかれているか)を宣言する。
そのスクリプトファイルがUTF8フラグ付きである事、スクリプトファイルがどんな文字コードで書かれているかを宣言する。
** 効果 [#e2b879ba]
- Perlのソースコード自体の文字列をUTF8フラグ付きにする。
- 標準入力と標準出力を指定した文字コードに変換する。
- その際、入力についてはUTF8フラグを付け、出力についてはUTF8フラグを落とす。
(1) スクリプト内の文字列をすべてUTF8フラグ付きにする。
~(2) 標準入力と標準出力を指定した文字コードに変換する。
~(3) その際、入力についてはUTF8フラグを付け、出力についてはUTF8フラグを落とす。
*** use utf8 [#f0468f77]
#!/usr/bin/perl
use encoding 'utf8';
ではなく、
#!/usr/bin/perl
use utf8;
とすると、(1)のUTF8フラグ付きにする効果は変わらないが、(2)(3)の効果はない。
*** PerlIOレイヤー [#q181506f]
(2)(3)の機能をPerlIOレイヤーと言う。標準入力・標準出力の文字コードを個別に設定する事も可能。この機能はuse encoding以外にもopen()等で使用できる。
** 使いどころ [#ob588d97]
Perlのソースコード内に日本語を書いて、それを加工するような時。
下のプログラムはuse encodingを記述しないと「あ」は表示されず、化ける。
use encoding 'euc-jp';
$text = "あああ";
print substr($text,0,1),"\n";
** 注意点 [#b996384e]
- ファイルの入出力については効果がない。それにはuse openなどを使う。
- (標準出力に)print()する文字列はUTF8フラグがあってはならない(Perlがwarningを出す)。そのため、出力時にUTF8を落とす必要がある。
** 文字コードの変換 [#caf98f4d]
*** ソースコード(EUC) → 標準出力(SJIS) [#x0407b27]
** 例 [#caf98f4d]
*** スクリプト(EUC) → 標準出力(SJIS) [#x0407b27]
#!/usr/bin/perl
use encoding 'euc-jp', STDOUT => 'shift_jis';
$text = '花鳥風月';
@chars = split '',$text;
foreach $c (@chars){
print $c,"\n";
}
*** 標準入力(EUC) → ソースコード(SJIS) → 標準出力(SJIS) [#h76657df]
EUCなターミナルから文字を入力すると、ターミナルにはSJISな文字が帰ってくる。
*** 標準入力(EUC) → スクリプト(SJIS) → 標準出力(SJIS) [#h76657df]
EUCなターミナルから文字を入力すると、ターミナルにはSJISな文字が返ってくる。
#!/usr/bin/perl
use encoding 'shiftjis', STDIN=>'euc-jp';
while (<>) {
($char) = split '', $_;
print $char,"\n";
}
** use utf8 [#f0468f77]
use utf8は、use encoding 'utf8'と同じ意味。