考虑以下问题:
多行字符串$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(...)
潜艇的启发式/功能?