2

都市名のリストを含むファイルを処理しようとしています。私の目標は、標準の 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 は機能します。例えば

...
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 に答える