je suis en train de chercher un motif me permettant de transposer un
caract=C3=A8re accentu=C3=A9 en [le m=C3=AAme caract=C3=A8re non accentu=C3=
=A9] et j'aimerais
bien =C3=A9viter de me peler la liste =C3=A0 la main...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Nicolas George
Thomas vO wrote in message :
perl -e '$a="créer";
Tel quel, $a contient une chaîne d'octets. Les prédicats fonctionnant sur les chaînes de caractères Unicode ne fonctionnent donc pas correctement, seulement en mode dégradé sur l'ASCII.
Il faut donc déjà remédier à ça : use utf8 pour les chaînes directement écrites dans le script, binmode ":utf8" (ou :encoding(...)) pour les chaînes venant d'un filehandle, et Encode::decode pour le reste.
$a=~s/(PMpM+)//g;print $a' -> "créer"
alors que (normal) : perl -e '$a="créer";$a=~s/(PMpM*)//g;print $a' -> ""
De toutes façons, ce que tu fais est faux : tu enlèves les accents (pM*), mais tu enlèves aussi le caractère sur lequel ils se trouvent (le PM lui-même). Il faut soit écrire s/(PM)pM+/$1/g (pour remplacer le caractère accentué par sa version de base), soit plus simplement s/pM//g (pour supprimer tout simplement les accents).
L'autre erreur que tu fais, c'est que ta chaîne (en supposant que tu aies corrigé le premier point) contient le caractère [e accent aigu], pas la paire de caractères [e] [accent aigu]. Le prédicat pM ne s'applique donc pas. La première étape consiste donc à décomposer le caractère, ce qui est le rôle des fonctions Unicode::NFD et Unicode::NFKD (qui sont subtilement différentes).
Thomas vO wrote in message <m18wr9xn8t.fsf@pc-gridmip.cict.fr>:
perl -e '$a="créer";
Tel quel, $a contient une chaîne d'octets. Les prédicats fonctionnant sur
les chaînes de caractères Unicode ne fonctionnent donc pas correctement,
seulement en mode dégradé sur l'ASCII.
Il faut donc déjà remédier à ça : use utf8 pour les chaînes directement
écrites dans le script, binmode ":utf8" (ou :encoding(...)) pour les chaînes
venant d'un filehandle, et Encode::decode pour le reste.
$a=~s/(PMpM+)//g;print $a' -> "créer"
alors que (normal) :
perl -e '$a="créer";$a=~s/(PMpM*)//g;print $a' -> ""
De toutes façons, ce que tu fais est faux : tu enlèves les accents (pM*),
mais tu enlèves aussi le caractère sur lequel ils se trouvent (le PM
lui-même). Il faut soit écrire s/(PM)pM+/$1/g (pour remplacer le caractère
accentué par sa version de base), soit plus simplement s/pM//g (pour
supprimer tout simplement les accents).
L'autre erreur que tu fais, c'est que ta chaîne (en supposant que tu aies
corrigé le premier point) contient le caractère [e accent aigu], pas la
paire de caractères [e] [accent aigu]. Le prédicat pM ne s'applique donc
pas. La première étape consiste donc à décomposer le caractère, ce qui est
le rôle des fonctions Unicode::NFD et Unicode::NFKD (qui sont subtilement
différentes).
Tel quel, $a contient une chaîne d'octets. Les prédicats fonctionnant sur les chaînes de caractères Unicode ne fonctionnent donc pas correctement, seulement en mode dégradé sur l'ASCII.
Il faut donc déjà remédier à ça : use utf8 pour les chaînes directement écrites dans le script, binmode ":utf8" (ou :encoding(...)) pour les chaînes venant d'un filehandle, et Encode::decode pour le reste.
$a=~s/(PMpM+)//g;print $a' -> "créer"
alors que (normal) : perl -e '$a="créer";$a=~s/(PMpM*)//g;print $a' -> ""
De toutes façons, ce que tu fais est faux : tu enlèves les accents (pM*), mais tu enlèves aussi le caractère sur lequel ils se trouvent (le PM lui-même). Il faut soit écrire s/(PM)pM+/$1/g (pour remplacer le caractère accentué par sa version de base), soit plus simplement s/pM//g (pour supprimer tout simplement les accents).
L'autre erreur que tu fais, c'est que ta chaîne (en supposant que tu aies corrigé le premier point) contient le caractère [e accent aigu], pas la paire de caractères [e] [accent aigu]. Le prédicat pM ne s'applique donc pas. La première étape consiste donc à décomposer le caractère, ce qui est le rôle des fonctions Unicode::NFD et Unicode::NFKD (qui sont subtilement différentes).
Thomas vO
merci pour les indications,
à (at) 24 Nov 2008 14:23:38 GMT, Nicolas George <nicolas$ nous disait (told us):
À (at) 24 Nov 2008 15:06:26 GMT, Nicolas George <nicolas$ écrivait (wrote):
Thomas vO wrote in message :
il existe des modules Perl pour ça ? je trouve seulement pour C ou Java...
Quand j'écris « Unicode::NFD », ça parle du module Unicode. Qui fait partie de la distribution standard.
Heu... ?!?
Personnellement, j'utilise les fonctiosn du module Unicode::Normalize : ce sont NFD, NFC, NFKD et NFKC.
À ma connaissance, il n'existe pas de module Unicode...
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
M
Thomas vO a écrit :
bonjour,
je suis en train de chercher un motif me permettant de transposer un caractère accentué en [le même caractère non accentué] et j'aimerais bien éviter de me peler la liste à la main...
alors que (normal) : perl -e '$a="créer";$a=~s/(PMpM*)//g;print $a' -> ""
pourtant, d'après ce que je comprends de la doc, (PMpM+) devrait 'matcher' [tout sauf un accent] suivi de [au moins un accent], non ?
j'ai demandé à Google s'il connaissait pas, mais apparemment, non (ou alors je lui ai pas donné les bons mots-clefs...).
merci pour toute piste,
Bonsoir,
J'ai été confronté à un problème avec perl et unicode, je cherchais les caractères accentués. Après avoir appelé les mongueurs de Genève à l'aide, contrôlé le fichier de données, l'environnement, nous avions trouvé:
Le fichier était bon, mais en effet Perl n'utilise pas par défaut unicode pour ses fichiers standards. "-C7" sur la ligne de commande le force, ou la variable d'environnement "PERL_UNICODE=7". Voir perlrun: http://search.cpan.org/~rgarcia/perl-5.10.0/pod/perlrun.pod
Salutations.
Thomas vO a écrit :
bonjour,
je suis en train de chercher un motif me permettant de transposer un
caractère accentué en [le même caractère non accentué] et j'aimerais
bien éviter de me peler la liste à la main...
alors que (normal) :
perl -e '$a="créer";$a=~s/(PMpM*)//g;print $a' -> ""
pourtant, d'après ce que je comprends de la doc, (PMpM+) devrait
'matcher' [tout sauf un accent] suivi de [au moins un accent], non ?
j'ai demandé à Google s'il connaissait pas, mais apparemment, non (ou
alors je lui ai pas donné les bons mots-clefs...).
merci pour toute piste,
Bonsoir,
J'ai été confronté à un problème avec perl et unicode, je cherchais les
caractères accentués. Après avoir appelé les mongueurs de Genève à
l'aide, contrôlé le fichier de données, l'environnement, nous avions trouvé:
Le fichier était bon, mais en effet Perl n'utilise pas par défaut
unicode pour ses fichiers standards. "-C7" sur la ligne de commande le
force, ou la variable d'environnement "PERL_UNICODE=7".
Voir perlrun: http://search.cpan.org/~rgarcia/perl-5.10.0/pod/perlrun.pod
je suis en train de chercher un motif me permettant de transposer un caractère accentué en [le même caractère non accentué] et j'aimerais bien éviter de me peler la liste à la main...
alors que (normal) : perl -e '$a="créer";$a=~s/(PMpM*)//g;print $a' -> ""
pourtant, d'après ce que je comprends de la doc, (PMpM+) devrait 'matcher' [tout sauf un accent] suivi de [au moins un accent], non ?
j'ai demandé à Google s'il connaissait pas, mais apparemment, non (ou alors je lui ai pas donné les bons mots-clefs...).
merci pour toute piste,
Bonsoir,
J'ai été confronté à un problème avec perl et unicode, je cherchais les caractères accentués. Après avoir appelé les mongueurs de Genève à l'aide, contrôlé le fichier de données, l'environnement, nous avions trouvé:
Le fichier était bon, mais en effet Perl n'utilise pas par défaut unicode pour ses fichiers standards. "-C7" sur la ligne de commande le force, ou la variable d'environnement "PERL_UNICODE=7". Voir perlrun: http://search.cpan.org/~rgarcia/perl-5.10.0/pod/perlrun.pod
Salutations.
mpg
Le (on) lundi 24 novembre 2008 15:23, Nicolas George a écrit (wrote) :
L'autre erreur que tu fais, c'est que ta chaîne (en supposant que tu aies corrigé le premier point) contient le caractère [e accent aigu], pas la paire de caractères [e] [accent aigu]. Le prédicat pM ne s'applique donc pas. La première étape consiste donc à décomposer le caractère, ce qui est le rôle des fonctions Unicode::NFD et Unicode::NFKD (qui sont subtilement différentes).
Wha, super, ce fil et notamment la mention d'Unicode::Normalize répond à une question que je me posais depuis pas mal de temps. Merci à tous.
Manuel.
Le (on) lundi 24 novembre 2008 15:23, Nicolas George a écrit (wrote) :
L'autre erreur que tu fais, c'est que ta chaîne (en supposant que tu aies
corrigé le premier point) contient le caractère [e accent aigu], pas la
paire de caractères [e] [accent aigu]. Le prédicat pM ne s'applique donc
pas. La première étape consiste donc à décomposer le caractère, ce qui est
le rôle des fonctions Unicode::NFD et Unicode::NFKD (qui sont subtilement
différentes).
Wha, super, ce fil et notamment la mention d'Unicode::Normalize répond à une
question que je me posais depuis pas mal de temps. Merci à tous.
Le (on) lundi 24 novembre 2008 15:23, Nicolas George a écrit (wrote) :
L'autre erreur que tu fais, c'est que ta chaîne (en supposant que tu aies corrigé le premier point) contient le caractère [e accent aigu], pas la paire de caractères [e] [accent aigu]. Le prédicat pM ne s'applique donc pas. La première étape consiste donc à décomposer le caractère, ce qui est le rôle des fonctions Unicode::NFD et Unicode::NFKD (qui sont subtilement différentes).
Wha, super, ce fil et notamment la mention d'Unicode::Normalize répond à une question que je me posais depuis pas mal de temps. Merci à tous.