OVH Cloud OVH Cloud

Récupérer le code d'un caractère

2 réponses
Avatar
dd
Bonjour, je ne connais pas le Perl, mais je pense que ce sera l'outil
le plus adapté pour une ligne d'un script shell que je suis en train
d'écrire. À un endroit, je dois filtrer la sortie standard du processus
précédent, pour que tout caractère non ASCII (on a affaire à de l'UTF-8)
soit converti en son "numeric character reference" : 葉

Je suppose qu'une seule ligne de commande doit suffire (lancement de perl
y compris), mais je ne sais comment faire. Pouvez-vous m'aider ?

--
dd

2 réponses

Avatar
Nicolas George
dd wrote in message <44f697ef$0$7642$:
Bonjour, je ne connais pas le Perl, mais je pense que ce sera l'outil
le plus adapté pour une ligne d'un script shell que je suis en train
d'écrire. À un endroit, je dois filtrer la sortie standard du processus
précédent, pour que tout caractère non ASCII (on a affaire à de l'UTF-8)
soit converti en son "numeric character reference" : &#33865;


La première chose à faire est de passer l'entrée standard en mode de
conversion UTF-8 -> Unicode :

binmode STDIN, ":utf8";

ensuite, la fonction ord permet d'obtenir le code, et un s/.../.../ge me
semble tout à fait adapté :

s/([^x00-x7E])/sprintf "&#x%04x;", ord $1/ge

Avatar
Klaus
dd wrote:
Bonjour, je ne connais pas le Perl,


je propose donc http://perl.enstimac.fr/DocFr/perlintro.html

mais je pense que ce sera l'outil
le plus adapté pour une ligne d'un script shell que je suis en train
d'écrire. À un endroit, je dois filtrer la sortie standard du p rocessus
précédent, pour que tout caractère non ASCII


ce sont donc tout caractère du code hors de 0..127
( ou en octal: hors de 00..177 )

(on a affaire à de l'UTF-8)
soit converti en son "numeric character reference" : &#33865;


voir http://perldoc.perl.org/perlunicode.html
(je suis désolé, c'est en VO, je n'ai pas trouvé une traduct ion
française)

Sur mon système Windows XP, j'ai créé un petit fichier de te st
("data.txt") codé en utf8 sous "notepad.exe". Le type de codage est
inscrit directement dans le fichier "data.txt" (voir dans notepad menu
"File" / "Save As..." / "Encoding UTF-8") --> donc perl sait déjà
l'encodage UTF-8. Sinon, je serais obligé de dire "use encoding
'utf8';" dans mon programme.

Voici le contenu de mon fichier "data.txt":
=======================
ZД
I аБл
иCDé#
&çà%ù
£$¨çï
=======================

Je suppose qu'une seule ligne de commande doit suffire (lancement de perl
y compris), mais je ne sais comment faire. Pouvez-vous m'aider ?


C:>perl -pe "s/[^00-177]/sprintf(q{&#%d;}, ord $&)/ge" data.txt

voici le résultat:
=======================
&#239;&#187;&#191;Z&#208;&#148;
I &#208;&#176;&#208;&#145;&#208;&#187;
&#208;&#184;CD&#195;&#169;#
&&#195;&#167;&#195;&#160;%&#195;&#185;
&#194;&#163;$&#194;&#168;&#195;&#167;&#195;&#175;
=======================

voir aussi http://perl.enstimac.fr/DocFr/perlrun.html