有音译成ASCII的问题

时间:2013-02-18 22:08:08

标签: perl unicode ascii iconv

我正在尝试处理包含城市名称列表的文件。我的目标是输出音译为标准ASCII的城市名称列表。出于某种原因,我只是遇到了问题。我一直在使用Perl中的iConv和Text :: Unidecode库,两者都让我失望。

以下是我称之为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会工作。 E.g。

...
print unidecode("Måløv");

将按照我的预期输出“Malov”。

我做错了什么?

2 个答案:

答案 0 :(得分:8)

您需要将输入读作UTF-8。按this question,尝试添加

use open qw(:std :utf8);
while(<>)循环之前

答案 1 :(得分:0)

您也可以尝试:

use utf8::all;

utf8::all将打开Unicode - 全部。