2010-02-22 7 views

Répondre

34

Pour une solution générique, Text::Unidecode translittérer à peu près tout ce qui y est jeté en US-ASCII pur.

Donc, dans votre cas cela fonctionnerait:

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

Le C est là pour vous assurer que l'entrée est lu comme UTF8

Il convertit:

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

dans ce :

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 

Le dernier montre les limites du module, qui ne peut pas déduire les voyelles et obtenir l'as-salaamu `alaykum de l'arabe original. Il est encore assez bon, je pense

2

Hmm, un peu difficile. Cela semble le faire (Perl 5.10.0 sur MacOS X 10.6.2): ​​

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

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

Je ne l'ai pas encore minimisé cela. Voir perldoc dans l'instruction 'use open'. En fonction de mes expériences (limitées), l'option '-p' ne reconnaît pas les directives 'use open'. Vous pouvez utiliser « QW() » pour reprendre les mots:

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

Je ne sais pas si « -p » n'obéissaient « utiliser open » est un bug ou une caractéristique de conception.

+0

Oui, il serait intéressant de savoir pourquoi -p ne fonctionne pas. – stephenmm

4

Cela a fait l'affaire pour moi:

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

Notez que la première barre est le caractère \ x {2013} lui-même.

+4

Une explication du '-C1' ferait des merveilles. L'information est disponible sur http://perldoc.perl.org/perlrun.html (-C1 signifie 'l'entrée standard est en UTF8'). –

0

Alternativement, vous pouvez simplement spécifier l'encodage UTF-8 des caractères que vous voulez remplacer:

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

Ici valeur hexadécimale E28093 est l'encodage UTF-8 de valeur hexadécimale 2013. Vous pouvez trouver différents outils en ligne pour obtenir l'encodage UTF-8 pour un personnage, ou vous pouvez simplement regarder my.dat dans un éditeur hexadécimal.

Questions connexes