さて、今回の一連の仕事で手に入れた知識:ShiftJISのファイルを読み込んでUnicodeにdecodeする時にEncodeを使ってはいけない。だが、Encodeが悪い訳ではない。悪いのは機種依存文字である。もうとにかくバケバケになるのである。
#!/usr/local/bin/perl
use strict;
use Encode;while (<>) {
print decode('sjis', $_); # バケラッタ
}
最初はこれが機種依存文字だと気づかずにこんな感じで色々やってみてたのだが
#!/usr/local/bin/perl
use strict;
binmode(STDIN, ':encoding(sjis)');
while (<>) {
print; # バケラッタ
}
ほとほと困り果てて、ようやく行き着いたのがShiftJIS::CP932::MapUTF。
#!/usr/local/bin/perl
use strict;
use ShiftJIS::CP932::MapUTF;while (<>) {
print cp932_to_unicode($_);
}
貞廣さんありがとうっっっ!これにいきつかなかったらもう後は自分でマッピング作って変換するか、ってところでしたよ。