2013-02-18 2 views
1

도시 이름 목록이있는 파일을 처리하려고합니다. 내 목표는 표준 ASCII로 음역 된 도시 이름 목록을 출력하는 것입니다. 웬일인지, 나는 단지 계속 문제에 부딪치게된다. 나는 Perl에서 iConv와 Text :: Unidecode 라이브러리를 파고 들었고, 둘 다 실패하고있다. 다음ASCII로 음역 변환하는 중

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 

여기

내가 cities.txt 전화 할게 파일에 도시 이름의 샘플 목록입니다 이것은 ASCII가 아닌 문자 중 일부에서는 잘되지만 실패합니다. 특히 ø 문자로 실패합니다. 내 목록에는 수천 개의 항목이 있습니다. 실제로 작은 샘플 세트보다 큰 결과를 연구하지는 않았지만 다른 실패도 있다고 확신합니다.

내 펄 시도는 다음과 같습니다 : 거기에서

#!/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 

, 펄이 작업을 수행합니다. 예 :

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

은 예상대로 "Malov"를 출력합니다.

내가 뭘 잘못하고 있니?

+2

'utf8 사용'은 * 당신이 필요로하지 않는 것임을주의하십시오; 당신의 * 소스 *가 입력 파일이 아니라 utf8이라는 것을 펄에게 알려준다. (직접적인 명령문 작업을하는 것이지만) – ysth

답변

8

입력을 UTF-8로 읽어야합니다. this question 당, 당신의 while(<>) 루프 전에

use open qw(:std :utf8); 

를 추가하려고합니다.

+0

정확히 내가 필요한 것, 감사합니다! – thetaiko

+0

'<>'는 반드시 stdin에서 읽는 것이 아닙니다; 입력 파일이 커맨드 라인 매개 변수로 주어지면'std'는 필요하지 않습니다. (그렇지 않은 경우 계속 유지하는 것이 좋습니다) – ysth

+0

@ysth : 고마워요. – nneonneo

0

또한 시도 할 수 :

use utf8::all; 

utf8::all 유니 코드 켜집니다 - 그것의 모든.