2

我正在尝试处理一个包含城市名称列表的文件。我的目标是输出一个将这些城市名称音译成标准 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”。

我究竟做错了什么?

4

2 回答 2

8

您需要将输入读取为 UTF-8。根据这个问题,尝试添加

use open qw(:std :utf8);

在你的while(<>)循环之前。

于 2013-02-18T22:17:23.417 回答
0

你也可以试试:

use utf8::all;

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

于 2013-02-19T01:07:02.550 回答