在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
我有一个文件名列表,其中 - 由于从 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