次の問題を検討してください。
複数行の文字列$junk
には、UTF-8 でエンコードされた行と ISO-8859-1 でエンコードされた行が含まれています。どの行がどのエンコーディングに含まれているかはアプリオリにわからないため、ヒューリスティックが必要になります。
$junk
ISO-8859-1 行を適切に再エンコードして、純粋な UTF-8 に変換したいと考えています。また、処理中にエラーが発生した場合は、エラーをスローするのではなく、「ベスト エフォートの結果」を提供したいと考えています。
私の現在の試みは次のようになります。
$junk = force_utf8($junk);
sub force_utf8 {
my $input = shift;
my $output = '';
foreach my $line (split(/\n/, $input)) {
if (utf8::valid($line)) {
utf8::decode($line);
}
$output .= "$line\n";
}
return $output;
}
各行の元のエンコーディングに関する情報が不足しているため、変換が完全に行われないことは明らかです。しかし、これは私たちが得ることができる「最善の努力の結果」でしょうか?
force_utf8(...)
サブのヒューリスティック/機能をどのように改善しますか?