在perl中转换损坏的unicode

Convert mangled unicode in perl

我有一个文件名列表,其中 - 由于从 unicode 转换不正确 - 一些名称被破坏了。

这个:

Naturalis_Biodiversity_Center_-_RMNH.ART.40_-_Gymnothorax_hepaticus_(Rüppell)_-_Kawahara_Keiga_-_1823_-_1829_-_Siebold_Collection_-_pencil_drawing_-_water_colour.jpeg

应该这样读(注意中途的变音):

Naturalis_Biodiversity_Center_-_RMNH.ART.40_-_Gymnothorax_hepaticus_(Rüppell)_-_Kawahara_Keiga_-_1823_-_1829_-_Siebold_Collection_-_pencil_drawing_-_water_colour.jpeg

其他情况是

Günther  => Günther
ForsskÃ¥l => Forsskål

除了手动搜索和替换之外,是否有其他方法可以使用 perl 查找和更正这些情况?

字符串采用 ISO-8859-1 编码而非 utf8。 您可以解码字符串:

use strict;
use warnings;
use Encode qw(decode);
use utf8;
use DDP;

my $str = 'Günther';
my $newStr = decode("iso-8859-1", $str);
p $newStr;

输出:

Günther