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



トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS