5.8.x な文字コード関連のメモ #contents * ソースの文字コードを指定 use encoding 'euc-jp'; PerlIOのSTDIN,STDOUTもこの文字コードの影響を受ける。~ STDERRは''受けない''。 // binmode STDERR, ':encoding(euc-jp)'; //としたけど Wide character in print といわれる。~ binmode STDOUT, ':encoding(euc-jp)'; などをさらに重ねるとハマる。 * 標準出力などの文字コードを指定 # eucで出力されるようになる use open OUT => ':encoding(euc-jp)'; # 上だけだと標準出力などに影響がないのでこれがいる use open ':std'; # 出力はutf8にならない use encoding 'euc-jp'; use open OUT => ':utf8'; use open ':std'; # こっちが正解 use encoding 'euc-jp', STDOUT=>'utf8'; * 3引数open use Encode; # sjisでファイルに出力 open OUT, ">:encoding(shiftjis)", $path; // # sjisのファイルを読み込む // open IN, "<:encoding(shiftjis)", $path; // # PerlIOを通さず出力 // open OUT, ">", $path; * 壊れたマルチバイト文字列(UTF8)の処理 http://blog.doofah.biz/?p=288 参照 # UTFフラグがつく $broken = decode('utf8', $broken); # つかない from_to($broken, 'utf8', 'utf8'); * 参考 - http://www.pure.ne.jp/~learner/program/Perl_unicode.html - http://www.context.co.jp/perlinfo/tech-notes/lecture-perl5.8-20020725/ - perldoc -- perluniintro [[和訳>http://perldoc.jp/docs/perl/5.8.1/perluniintro.pod]] -- perlunicode -- open [[和訳>http://perldoc.jp/docs/perl/5.8.1/open.pod]] -- encoding -- utf8 [[和訳>http://perldoc.jp/docs/perl/5.8.1/utf8.pod]] -- Encode