有音译成ASCII的问题

the*_*iko 1 unicode perl ascii iconv

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

以下是我称之为cities.txt的文件中城市名称的示例列表:

Måløv
Magtenbølle
Zvonarëvka
Denver
Zvëzdka
New York
Run Code Online (Sandbox Code Playgroud)

通过此操作iconv返回以下内容:

iconv -fUTF-8 -tASCII//TRANSLIT//IGNORE cities.txt

Mal?v
Magtenb?lle
Zvonarevka
Denver
Zvezdka
New York
Run Code Online (Sandbox Code Playgroud)

这在一些非ascii字符上表现很好,但是失败了,特别是在ø字符上.我的列表有几千个条目 - 虽然我实际上没有在大于一个小样本集上研究结果,但我确信还有其他失败.

我的perl尝试看起来像这样:

#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use Text::Unidecode;

while (<>) {
  print unidecode $_;
}
Run Code Online (Sandbox Code Playgroud)

那里的输出看起来像这样:

MAY=lA,v
MagtenbA,lle
ZvonarA<<vka
Denver
ZvA<<zdka
New York
Run Code Online (Sandbox Code Playgroud)

奇怪的是,如果我使用直接语句,Perl会工作.例如

...
print unidecode("Måløv");
Run Code Online (Sandbox Code Playgroud)

将按照我的预期输出"Malov".

我究竟做错了什么?

nne*_*neo 8

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

use open qw(:std :utf8);
Run Code Online (Sandbox Code Playgroud)

while(<>)循环之前.