考虑以下问题:
一个多行字符串
我想将
我的当前尝试如下:
一个多行字符串
$junk
包含一些使用 UTF-8 编码的行和一些使用 ISO-8859-1 编码的行。我不知道哪些行使用哪种编码,因此需要使用启发式方法。我想将
$junk
转换为纯粹的 UTF-8,并正确重新编码 ISO-8859-1 行。此外,在处理过程中如果出现错误,我希望提供“尽力而为”的结果,而不是抛出错误。我的当前尝试如下:
$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(...)
子函数的启发式/功能?
&
来调用子程序,只需使用force_utf8($junk)
即可。 - Sinan Ünür