文字コードについて調べてみた

研究室で文字コードについてWikiに書いておけ、と言われたので、文字コードについて調べてみた。

use encoding

そのファイルは指定した文字コードで扱いますよ、という宣言をする。
例えば以下のようにすると、ファイルの保存の文字コードも、キーボードで入力する文字コードも全部euc-jpしなければエラーが出たりするようになる。

use encoding "euc-jp";
binmode STDERR, ":encoding(euc-jp)";  # 標準エラー出力の文字コード設定
binmode STDIN, ":encoding(euc-jp)";   # キーボード入力の文字コード設定

print "入力:"
chomp($in = <STDIN>);
print "出力:".$in;

ファイル入力のときも同じようにオープン済みのファイルハンドルをbinmodeで設定する。openの設定もあるけど、前に書いたのでここでは省略。

また、文字コードが違うファイルを読み込むとき。

use encoding "euc-jp";
binmode STDERR, ":encoding(euc-jp)";      # 標準エラー出力の文字コード設定

my $file = "text.txt";                    # ファイルの文字コードはUTF8
open(IN,"<:encoding(utf8)",$file) || die; # UTF8のファイルをきちんと読み取る

while(<IN>){
    print $_;                             # 標準出力なのでeuc-jpに変換される
}