Perlは文字列を内部エンコーディングで扱う.読み書きするところで,外部のエンコーディングによるバイト列から内部エンコーディング文字列に変えるのがわかりやすい.ということで,
openするときにとしてencodingを指定する.
open(FH, "<:encoding(UTF-8)", $file); open(FH, ">:encoding(euc-jp)", $file); open(FH, ">>:encoding(shiftjis)", $file);
すでに開いてしまっているファイルハンドルのエンコーディングを後から変えるにはbinmodeが使える:
binmode(STDOUT, ":encoding(UTF-8)");
ファイルハンドルごとに指定するのが面倒な場合には,デフォルトを変えてしまうこともできる.
openプラグマを使う.
use open IN => ":encoding(shiftjis)", OUT => ":encoding(UTF-8)" use open IO => ":encoding(euc-jp)"
これらは標準入出力には影響を与えない.影響させるためにはこの後で:std
を使う:
use open ":std"
別の話として,ソースコード中に日本語をUTF-8で書きたいときにはutf8プラグマを使う.
use utf8
perldoc の,
Encode,
Encode::JP,
unicodeチュートリアル,
unicode FAQ,
open関数,
openプラグマ,
openチュートリアル,
utf8プラグマ
あたりを参照.
昔と違っていろいろweb上に有用な記事がある.以下はかなり良い.
http://www.rwds.net/kuroita/program/Perl_unicode.html
ほかにも,「perl encode 日本語」とかでgoogleを引くといろいろ出てくる.