[Perl] utf8 et lettre à

Dominique Asselineau asseline at telecom-paristech.fr
Jeu 15 Sep 18:36:23 CEST 2016


Le code indiqué ne compile pas chez moi.  J'ai essayé ceci :



#!/usr/bin/perl

use Modern::Perl;
use utf8;
#use feature qw/unicode_strings/;

binmode( STDOUT, ":encoding(UTF-8)" );
binmode( STDERR, ":encoding(UTF-8)" );

my $test="<toto>déjà</toto>";
my $reg1=qr{<toto>(.*?)</toto>};
my $reg2=qr{<toto>\s*(.*)\s*</toto>};
my $reg3=qr{<toto>\s*(.*?)\s*</toto>};
$test=~m/$reg1/;
say $1;
$test=~m/$reg2/;
say $1;
$test=~m/$reg3/;
say $1;




qui donne bien


déjà
déjà
déjà


Je ne suis pas arrivé à reproduire le problème.  J'ai essayé avec perl 5.14 et 5.20 sous Debian.  Je n'ai pas Windows.

Dominique

minc wrote on Thu, Sep 15, 2016 at 05:43:47PM +0200
> Il est écrit quelque part :
> 
> |U+00A0 NO-BREAK SPACE (not matched by \s) mais : my $test=encode_utf8(
> decode_utf8 "<toto>déjà</toto>") ; my $reg1=qr{<toto>(.*?)</toto>} ; my
> $reg2=qr{<toto>\s*(.*)\s*</toto>} ; my $reg3=qr{<toto>\s*(.*?)\s*</toto>} ;
> $test=~m/$reg1/ ; say $1 ; $test=~m/$reg2/ ; say $1 ; $test=~m/$reg3/ ; say
> $1 ; qui donne : déjà déjà déjxC3 |
> 
> [pour les sceptiques il peuvent essayer en remplaçant 'à' par 'ā' ( le a
> macron ;)  ) ou une autre lettre]
> CQFD = bug
> 
> Charles
> 
> Charles
> 
> Le 15/09/2016 à 14:30, minc a écrit :
> >Non , d'ailleurs le pragma use utf8  est ici , inutile puisque que cette
> >directive
> >
> >porte essentiellement sur le texte du programme lui-même et je travaille
> >
> >avec des fichiers dont je contrôle les entrées et les sorties.
> >
> >J'ai néanmoins testé et dans mon cas les longueurs de mots deviennent
> >erronées,
> >sans pour autant remédier à la question.
> >
> >J'utilise un perl 5.16.3, windows 7 et les fichiers xml sources sont en
> >UTF8.
> >
> >Merci.
> >
> >Merci Laurent (ce n'est pas critique, j'ai mes résultats, mais cette
> >exception
> >est curieuse, le même résultat est obtenu avec chop ! ).
> >
> > Le 15/09/2016 à 13:27, Dominique Asselineau a écrit :
> >>Bonjour,
> >>
> >>Les 2 lignes suivantes sont-elles présentes dans les déclarations :
> >>
> >>use utf8;
> >>use feature 'unicode_strings';
> >>
> >>Dominique
> >>
> >>minc wrote on Thu, Sep 15, 2016 at 01:17:23PM +0200
> >>>Bonjour,
> >>>
> >>>J’extraie des mots d'un dictionnaire en xml avec la regex
> >>>
> >>>suivante  :  my
> >>>$extract=qr{<orthography>\s*(?<word>.*?)\s*</orthography>} ;
> >>>
> >>>les résultats sont correctes sauf pour les mots se terminant par 'à'
> >>>tel que
> >>>"déjà" ou j'obtiens
> >>>
> >>>"déj\xC3" sachant que 'à' en utf8 est la suite 'C3 A0'.
> >>>
> >>>Les autres caractères accentués ne me semble pas poser de problème.
> >>>
> >>>Le résultat est corrigé avec :
> >>>
> >>>     my $extract=qr{<orthography>(?<word>.*?)</orthography>} ;
> >>>
> >>>Quelle hypothèse peut-on formuler pour expliquer cette "troncation" ?
> >>>
> >>>Merci.
> >>>
> >>>Charles
> >>>
> >>>begin:vcard
> >>>note;quoted-printable:Put your hand on a hot stove for a minute, and
> >>>it seems like an hour. Sit=
> >>>     with a pretty girl for an hour, and it seems like a minute.
> >>>That's relat=
> >>>    ivity.=0D=0A=
> >>>    (A. Einstein)
> >>>version:2.1
> >>>end:vcard
> >>>
> >>>_______________________________________________
> >>>Perl mailing list
> >>>Perl at mongueurs.net
> >>>http://listes.mongueurs.net/mailman/listinfo/perl
> >>
> >
> >
> >
> >_______________________________________________
> >Perl mailing list
> >Perl at mongueurs.net
> >http://listes.mongueurs.net/mailman/listinfo/perl
> 

> begin:vcard
> note;quoted-printable:Put your hand on a hot stove for a minute, and it seems like an hour. Sit=
> 	 with a pretty girl for an hour, and it seems like a minute. That's relat=
> 	ivity.=0D=0A=
> 	(A. Einstein)
> version:2.1
> end:vcard
> 

> _______________________________________________
> Perl mailing list
> Perl at mongueurs.net
> http://listes.mongueurs.net/mailman/listinfo/perl


-- 


Plus d'informations sur la liste de diffusion Perl