2013-02-18 44 views
1

我正在尝试处理具有城市名称列表的文件。我的目标是输出音译为标准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"); 

将按照我的预期输出“马洛夫”。

我在做什么错?

+2

请注意''使用utf8'不是*你所需要的;它只是告诉perl你的* source *是utf8,而不是输入文件(尽管这是你的直接声明的工作原理) – ysth 2013-02-18 22:20:02

回答

8

您需要将您的输入读取为UTF-8。每this question,试试你的while(<>)循环之前加入

use open qw(:std :utf8); 

+0

正是我需要的,谢谢! – thetaiko 2013-02-18 22:18:21

+0

'''''不一定是从标准输入读数;如果输入文件是以命令行参数的形式给出':std'不需要(尽管如果它们不是,那么保持好) – ysth 2013-02-18 22:25:23

+0

@ysth:谢谢,更正。 – nneonneo 2013-02-18 22:26:12

0

您也可以尝试:

use utf8::all; 

utf8::all将开启Unicode的 - 这一切。