我正在尝试处理具有城市名称列表的文件。我的目标是输出音译为标准ASCII的城市名称列表。出于某种原因,我只是不断遇到问题。我一直在用Perl和iConv和Text :: Unidecode库进行探讨,两者都让我失望。音译为ASCII时出现问题
这里是城市的名字在文件中的样本名单,我会打电话cities.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");
将按照我的预期输出“马洛夫”。
我在做什么错?
请注意''使用utf8'不是*你所需要的;它只是告诉perl你的* source *是utf8,而不是输入文件(尽管这是你的直接声明的工作原理) – ysth 2013-02-18 22:20:02