考虑以下问题:
多行字符串$junk
包含一些以UTF-8编码的行和一些以ISO-8859-1编码的行。我不知道哪些行是哪种编码的先验知识,因此将需要启发式。
我想通过正确重新编码ISO-8859-1行将$junk
转换为纯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(...)
子项的启发式/功能性? 最佳答案
除了我会先尝试使用Encode::Guess之外,我没有其他有用的建议。