最近のperlと文字コード変換と

 

2006-09-03 Perlで日本語(ISO-2022-JP)メールを送信(まとめ)

を参考に化けるという文字をテストしてみる。

#!/usr/bin/env perl
use utf8;
use open IN => ":utf8"; # 入出力をUTF8とする
use open OUT => ":iso-2022-jp"; # 出力をJISとする

use Jcode;
use Encode;

my $str='接~∥-¢£¬'; 
$str =~ tr/[\x{ff5e}\x{2225}\x{ff0d}\x{ffe0}\x{ffe1}\x{ffe2}]/[\x{301c}\x{2016}\x{2212}\x{00a\ 2}\x{00a3}\x{00ac}]/;

my $jis = jcode($str)->jis;

print "use Jcode\n";
print $jis;
print "\n";

print "use Encode\n";
my $enc = encode('jis', $str);
print $enc;
print "\n";

実行結果(teratermの出力をJISで。)

[takahasi@test takahashi]$ perl test.pl
use Jcode
接~∥-¢£¬
use Encode
接~∥-¢£¬

 文字化けなかった。

もう少しテストしたいとこと。

追記

#use utf8;

とすると、

use Jcode
+A\x{00bd}±・\x{00bd}\x{00b2}+A\x{00bd}\x{00b3}+A\x{00bd}´・\x{00bd}\x{00b5})A\x{008e}\x{00a5}+A\x{00bd}\x{009e}+$\x{0088}\x{00a5}+A\x{00bc}\x{008d}+A"D\x{00a0}+A"D"B+A"D¢
use Encode
+A\x{00bd}±・\x{00bd}\x{00b2}+A\x{00bd}\x{00b3}+A\x{00bd}´・\x{00bd}\x{00b5})A\x{008e}\x{00a5}+A\x{00bd}\x{009e}+$\x{0088}\x{00a5}+A\x{00bc}\x{008d}+A"D\x{00a0}+A"D"B+A"D¢

となる。

use Jcode; #←これは有効にする
#$str =~ tr/[\x{ff5e}\x{2225}\x{ff0d}\x{ffe0}\x{ffe1}\x{ffe2}]/[\x{301c}\x{2016}\x{2212}\x{00a\ 2}\x{00a3}\x{00ac}]/;

とすると、

use Jcode
アイウエオ接\x{ff5e}\x{2225}\x{ff0d}\x{ffe0}\x{ffe1}\x{ffe2}
use Encode
アイウエオ接\x{ff5e}\x{2225}\x{ff0d}\x{ffe0}\x{ffe1}\x{ffe2}

となってしまう。 ちなみに、

#use open OUT  => ":iso-2022-jp"; # 出力をJISとする
use open OUT  => ":utf8"; # 出力をUTF8とする

としても、出力は問題なかったようなので、ここは関係ない模様。