2010-02-22 54 views

回答

34

對於一個通用的解決方案,Text::Unidecode音譯幾乎所有投入到純US-ASCII中的東西。

所以你的情況這會工作:

perl -C -MText::Unidecode -n -i -e'print unidecode($_)' unicode_text.txt 

的-C在那裏,以確保輸入被解讀爲UTF8

它這個轉換:

l'été est arrivé à peine après aôut 
¿España es un paìs muy lindo? 
some special chars: » « ® ¼ ¶ – – — Ṉ 
Some greek letters: β ÷ Θ ¬ the α and ω (or is it Ω?) 
hiragana? みせる です 
Здравствуйте 
السلام عليكم 

這個:

l'ete est arrive a peine apres aout 
?Espana es un pais muy lindo? 
some special chars: >> << (r) 1/4 P - - -- N 
Some greek letters: b/Th ! the a and o (or is it O?) 
hiragana? miseru desu 
Zdravstvuitie 
lslm `lykm 

最後一個顯示模塊的限制,它不能推斷元音,並從原始的阿拉伯文得到as-salaamu`alaykum。它仍然是相當不錯的,我認爲

2

嗯,有點強硬。這似乎這樣做(在Mac OS X 10.6.2的Perl 5.10.0):

perl -w -e " 
use open ':encoding(utf8)'; 
use open ':std'; 

while (<>) 
{ 
    s/\x{2013}/-/g; 
    print; 
} 
" 

我還沒有最小化這一點。請參閱perldoc關於'使用公開'聲明。


從我的(有限)實驗來看,'-p'選項不能識別'use open'指令。 您可以使用「QW()」引用的話:

perl -w -e " 
use open qw(:encoding(utf8) :std); 
while (<>) 
{ 
    s/\x{2013}/-/g; 
    print; 
} 

我不知道,如果「-p」不服從「使用公開」是一個錯誤或設計功能。

+0

是的,知道爲什麼-p不起作用會很有趣。 – stephenmm 2010-02-22 16:21:08

4

這並獲得成功對我來說:

perl -C1 -i -pe 's/–/-/g' my.dat 

注意,第一條是\ X {} 2013字符本身。

+4

'-C1'的一些解釋會造成奇蹟。這些信息可在http://perldoc.perl.org/perlrun.html獲得(-C1表示'標準輸入是UTF8')。 – 2010-02-22 16:43:12

0

或者,你可以只指定字符的UTF-8編碼,你想替換:

perl -i -pe 's/\xE2\x80\x93/-/g' my.dat 

這裏的十六進制值E28093是十六進制值的UTF-8編碼2013年你可以找到各種工具在線獲取字符的UTF-8編碼,或者您可以在十六進制編輯器中查看my.dat。