suppression d'accents avec iconv

Le
mpg
Bonjour,

Il y un truc que j'aime bien avec recode, c'est la possibilité de convertir
automatiquement un texte en « 7-bit » par un correspondance approximative mais
honnête. Par exemple :

mpg@siegel:~$ echo àéïôù | recode -f u8..flat
aeiou

Malheureusement, recode n'est pas présent sur tous les systèmes. Iconv par
contre est présent sur, en tout cas, tousceux que je fréquente. J'aimerais bien
pouvoir faire pareil avec iconv que ci-dessus. Il me semble que c'est possible
(quelqu'un me l'a dit, mais vite fait et je n'ai pas retenu l'option). Je
n'arrive pas à trouver et le page de man d'icon n'est franchement pas bavarde.

Quelqu'un sait-il faire ça ?

Merci d'avance,
Manuel.
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Nicolas George
Le #1901178
(attention, tes lignes sont un petit peu trop longues)


mpg wrote in message
Malheureusement, recode n'est pas présent sur tous les systèmes. Iconv par
contre est présent sur, en tout cas, tousceux que je fréquente. J'aimerais bien
pouvoir faire pareil avec iconv que ci-dessus. Il me semble que c'est possible
(quelqu'un me l'a dit, mais vite fait et je n'ai pas retenu l'option). Je
n'arrive pas à trouver et le page de man d'icon n'est franchement pas bavarde.

Quelqu'un sait-il faire ça ?


Si c'est un GNU iconv :

iconv -t ASCII//TRANSLIT

fait ça. Sinon, si tu as un perl 5.8, tu peux utiliser son module Unicode
pour mettre le texte en forme canonique décomposée et enlever les
combinants :

perl -MUnicode::Normalize -pe 'BEGIN{binmode STDIN, ":encoding(utf-8)"}
$_ = NFD $_; y/[^x00-xFF]//cd'

Le comportement est un petit peu moins bon pour les caractères qui ne sont
pas juste des caractères accentués, comme oe ou le symbole euro. Tu peux
essayer de varier entre NFD et NFKD pour voir le quel marche mieux.

mpg
Le #1901176
Le (on) samedi 01 septembre 2007 10:57, Nicolas George a écrit (wrote) :

(attention, tes lignes sont un petit peu trop longues)

C'est vraiment trop long 80 ? Je descend à 76 alors.


mpg wrote in message

Quelqu'un sait-il faire ça ?


Si c'est un GNU iconv :

iconv -t ASCII//TRANSLIT

Magnifique. C'est exactement ce que je cherchais.


fait ça. Sinon, si tu as un perl 5.8, tu peux utiliser son module Unicode
pour mettre le texte en forme canonique décomposée et enlever les
combinants :

perl -MUnicode::Normalize -pe 'BEGIN{binmode STDIN, ":encoding(utf-8)"}
$_ = NFD $_; y/[^x00-xFF]//cd'

Oki. L'inconvénient par contre c'est qu'il faut que je le note :)


D'ailleurs, sur un système linux, lequel a-t-on le plus de chances de
trouver : Perl 5.8 ou GNU iconv ? Et (par curiosité) sur d'autres unix ?

Manuel.


Nicolas George
Le #1901173
Patrick Lamaizière wrote in message
Mais ça transforme éàéà en 'e`a'e`a


Pas chez moi, quelle est ta locale ?

Nicolas George
Le #1901172
mpg wrote in message
Magnifique. C'est exactement ce que je cherchais.


Pour référence, c'est documenté dans la documentation de la bibliothèque GNU
iconv. Mais sur un système GNU, iconv est intégré à la libc, et cette
information n'est pas reproduite dans la doc de la libc.

D'ailleurs, sur un système linux, lequel a-t-on le plus de chances de
trouver : Perl 5.8 ou GNU iconv ?


Les deux.

Et (par curiosité) sur d'autres unix ?


Plutôt perl 5.8.

Publicité
Poster une réponse
Anonyme