[Perl] utf8 et lettre à

Yon anaseto at bardinflor.perso.aquilenet.fr
Jeu 15 Sep 18:06:20 CEST 2016


On Thu, Sep 15, 2016 at 04:02:50PM +0000, Yon wrote:
> Bonjour,
> 
> On Thu, Sep 15, 2016 at 05:43:47PM +0200, minc wrote:
> > 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
> Je ne sais pas pourquoi cela se produit uniquement avec 'à', mais si
> effectivement il y a "use utf8;" dans l'en-tête, c'est, pour autant que
> je sache, incorrect de faire decode_utf8 sur une chaîne écrite à la main
> dans le fichier (Perl la représente internement déjà comme de l'utf8,
> donc cela fait un décode de quelque chose de déjà décodé).
> 
> Dans le même genre d'idées, mais je crois qu'ici ce n'est pas le
> problème, s'il y a une directive comme "use open qw(:std :utf8)", cela
> devient il me semble incorrect de faire un encode_utf8 d'une chaîne
> décodée (l'encodage se fait deux fois), et aussi illégal de faire des
> decode_utf8 (tout est par défaut déjà codé et décodé en utf8).
Par illégal, j'entend avant de faire un print où une lecture sur un
filehandle qui ne précise pas manuellement un autre encodage que celui
par défaut donné par la directive.

-- 
Yon


Plus d'informations sur la liste de diffusion Perl