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".
我究竟做错了什么?
您需要将输入读作UTF-8.根据这个问题,尝试添加
use open qw(:std :utf8);
Run Code Online (Sandbox Code Playgroud)
while(<>)循环之前.
| 归档时间: |
|
| 查看次数: |
380 次 |
| 最近记录: |