[Perl] utf8 et lettre à

Yon anaseto at bardinflor.perso.aquilenet.fr
Jeu 15 Sep 18:02:50 CEST 2016


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).

-- 
Yon


Plus d'informations sur la liste de diffusion Perl