2010-02-22 11 views

Odpowiedz

34

Dla ogólnego rozwiązania, Text::Unidecode transliterować prawie wszystko, co jest rzucone na to w czystym US-ASCII.

Więc w twoim przypadku to będzie działać:

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

-C jest tam, aby upewnić się, że wejście jest odczytywane jako utf8

Przekształca to:

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? みせる です 
Здравствуйте 
السلام عليكم 

do tego :

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 

Ostatni pokazuje ograniczenia modułu, które nie mogą wywnioskować samogłosek i uzyskać asamaran alamkum z oryginału arabskiego. To wciąż bardzo dobry myślę

2

Hmm, trochę trudne. Wydaje się to zrobić (Perl 5.10.0 na MacOS X 10.6.2): ​​

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

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

jeszcze nie zminimalizowane że. Zobacz perldoc w instrukcji "use open".


Sądząc po moich (ograniczonych) eksperymentach, opcja "-p" nie rozpoznaje dyrektyw "use open". Można użyć „qw()” zacytować słowa:

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

ja nie wiem, czy „-p” nieprzestrzegania „używać otwartego” jest to błąd lub funkcja projekt.

+0

Tak, byłoby interesujące wiedzieć, dlaczego -p nie działa. – stephenmm

4

zrobił to sztuczka dla mnie:

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

Zauważ, że pierwszy pasek jest \ x {2013} postać sama.

+4

Niektóre wyjaśnienia "-C1" zdziałają cuda. Informacje są dostępne na stronie http://perldoc.perl.org/perlrun.html (-C1 oznacza "standardowe wejście w UTF8"). –

0

Alternatywnie, można po prostu określić kodowanie UTF-8 znaków chcesz zastąpić:

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

Tutaj wartość hex E28093 jest kodowanie UTF-8 o wartości hex 2013. Można znaleźć różne narzędzia w trybie online, aby uzyskać kodowanie UTF-8 dla postaci, lub możesz po prostu spojrzeć na my.dat w edytorze szesnastkowym.

Powiązane problemy