2013年1月1日火曜日

[Perl]文字コード

Windows での Shitf-JIS の扱い方
ソースコード、Config ファイルは UTF-8 で記述してある
use strict;
use utf8;
use Encode;
use Config::Simple;
binmode STDIN, ":utf8";
binmode STDOUT, ":encoding(shift-jis)";

# 設定ファイルを読み込む
my $cfg_obj = new Config::Simple("./config.cfg") || die "Cannot read config file (config.cfg)\n";
my %cfg = $cfg_obj->vars();
$str = decode('utf-8', $cfg{'default.cfg1'});
print "$str\n";
内部文字列・外部ファイル読み込み・外部ファイルへ書き出し
use strict;
use utf8;
use Encode;
use Encode::Guess;
use Config::Simple;
use Log::Handler;
binmode STDOUT, ':encoding(shiftjis)';

my $str = '内部文字列';
my $log = Log::Handler->new();
$log->add(file => {
  filename => 'char_code.log',
  mode => 'append',
  maxlevel => 'debug',
  minlevel => 'info',
  newline => 1,
  timeformat => '%Y/%m/%d %H:%M:%S',
  message_layout => '[%T %L] %m',
});

my $cfg_obj = new Config::Simple("./char_code.cfg");
my %cfg = $cfg_obj->vars();

# 内部文字列を STDOUT, log に出力
print "$str (" . guess_encoding($str)->name .")\n";
$str = encode("utf8", $str); # UTF-8 フラグを外す
$log->debug($str . " (" . guess_encoding($str)->name . ")");

# Config 文字列を読み込み
$str = $cfg{'Test.test1'};
$str = decode("utf8", $str); # 内部処理は UTF-8 に decode してから行う

# STDOUT, log に出力
print "$str (" . guess_encoding($str)->name . ")\n";
$str = encode("utf8", $str); # UTF-8 フラグを外す
$log->debug($str . " (" . guess_encoding($str)->name . ")");

0 件のコメント:

コメントを投稿