2010-02-22 18 views

risposta

34

Per una soluzione generica, lo Text::Unidecode traslitterazione praticamente tutto ciò che viene generato in puro US-ASCII.

Quindi nel tuo caso questo dovrebbe funzionare:

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

Il -C è lì per assicurarsi che l'ingresso viene letto come utf8

Converte questo:

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

in questo :

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 

L'ultimo mostra i limiti del modulo, che non può dedurre le vocali e ottenere as-salaamu 'alaykum dall'originale arabo. E 'ancora piuttosto buona Penso

2

Hmm, un po 'difficile. Questo sembra farlo (Perl 5.10.0 su MacOS X 10.6.2): ​​

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

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

non ho ancora ridotto al minimo quello. Vedere perldoc nell'istruzione 'use open'.


A giudicare dai miei (limitati) esperimenti, l'opzione '-p' non riconosce le direttive 'use open'. È possibile utilizzare 'QW()' per dirla con le parole:

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

Non so se '-p' non aver obbedito 'utilizzare aperto' è un bug o di una caratteristica di design.

+0

Sì, sarebbe interessante sapere perché -p non funziona. – stephenmm

4

Questo ha fatto il trucco per me:

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

Nota che il primo bar è il \ x {2013} carattere stesso.

+4

Alcune spiegazioni del '-C1' farebbero miracoli. Le informazioni sono disponibili su http://perldoc.perl.org/perlrun.html (-C1 significa 'input standard è in UTF8'). –

0

In alternativa, si può solo specificare la codifica UTF-8 dei caratteri che si desidera sostituire:

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

Qui valore esadecimale E28093 è la codifica UTF-8 di valore esadecimale 2013. È possibile trovare diversi strumenti online per ottenere la codifica UTF-8 per un personaggio, oppure puoi guardare my.dat in un editor esadecimale.

Problemi correlati