Perl5.8以降のEncode - XXXannexの続きの話。Encode::Guessは、推測の候補が2つ以上あるとEncode::Encodingのオブジェクトではなくエラーメッセージを返すらしいです。
On failure, $decoder now contains an error message so the whole thing would be as follows;
Encode::Guess - Guesses encoding from data - metacpan.org
Encode::Guess - Guesses encoding from data - metacpan.org
# more elaborate way use Encode::Guess; my $enc = guess_encoding($data, qw/euc-jp shiftjis 7bit-jis/); ref($enc) or die "Can't guess: $enc"; # trap error this way $utf8 = $enc->decode($data); # or $utf8 = decode($enc->name, $data)
実際はdieしてしまっては困るので、他の外部要因から決め打ちするとかしないといけないのでしょうね。とりあえず自分のプログラムでは
@lines = split(/\n/, encode('euc-jp', decode("Guess", join("\n", @lines))));
まるごと入れるという力技にしました・・・。
こちらも参照。
404 Blog Not Found:ruby|perl - 文字コードのちょっと高度な判定