我正在尝试处理一个包含城市名称列表的文件。我的目标是输出一个将这些城市名称音译成标准 ASCII 的列表。出于某种原因,我只是不断遇到问题。我一直在研究 iConv 和 Perl 中的 Text::Unidecode 库,但都让我失望了。
以下是我将调用的文件中的城市名称的示例列表ities.txt:
Måløv
Magtenbølle
Zvonarëvka
Denver
Zvëzdka
New York
运行它iconv
会返回以下内容:
iconv -fUTF-8 -tASCII//TRANSLIT//IGNORE cities.txt
Mal?v
Magtenb?lle
Zvonarevka
Denver
Zvezdka
New York
这在一些非 ascii 字符上效果很好,但失败了,尤其是在ø
字符上。我的列表有几千个条目——虽然我实际上没有研究过比小样本集更大的结果,但我确信还有其他失败。
我的 perl 尝试如下所示:
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use Text::Unidecode;
while (<>) {
print unidecode $_;
}
那里的输出如下所示:
MAY=lA,v
MagtenbA,lle
ZvonarA<<vka
Denver
ZvA<<zdka
New York
奇怪的是,如果我使用直接语句,Perl 确实可以工作。例如
...
print unidecode("Måløv");
将按我的预期输出“Malov”。
我究竟做错了什么?