[Perl] passage à UTF-8

Vincent Pit (VPIT) perl at profvince.com
Mar 14 Juin 20:57:30 CEST 2016



Le 14/06/2016 à 20:44, Dominique Asselineau a écrit :
> Bonjour,
>
> Je suis en train de passer en UTF-8

Unicode

> mes kilomètres de code Perl.  J'ai
> parcouru pas mal de docs avant de me lancer mais je préférerais avoir
> votre avis, en tout cas celui de ceux qui ont réalisé l'opération avec
> succès, avant d'avancer davantage au risque de faire des mauvais choix.
>
> Naturellement, comme je n'ai pas envie d'agir au coup par coup par des
> encode/decode et :utf8 à chaque entrée/sortie, j'essaie de charger des
> modules qui permettent de traiter une grosse partie des cas.

C'est pourtant la bonne manière de faire.

>
> Est-ce que je m'y prends bien en mettant en en-tête de tous mes sources les lignes suivantes ?
>
>    use Modern::Perl;

Inutile.

>    use utf8;

Utile si et seulement si ton fichier source est encodé en UTF-8. À 
n'utiliser que si tu as transcodé la source de l'encodage initial 
(latin1 j'imagine) vers UTF-8, par exemple avec iconv.

>    use feature qw/unicode_strings/;

Bien, tant tu fais bien attention que tes regexp continuent de faire ce 
que tu attends d'elles.

>    use CGI qw/:utf8/;

La doc CGI n'indique pas d'option :utf8, par contre il y a une option 
-utf8, qui semble t'être utile à première vue.

>
> et en utilisant l'option -C avec
>
>     -COE

Pas faux à proprement parler, mais mieux vaut appliquer manuellement la 
couche ':encoding(UTF-8)' sur STDOUT et STDERR via binmode (-COE doit 
être placé sur le shebang ce qui ne sera pas très lisible quand tu 
reviendras relire ton code dans 5 ans, et je crois qu'il est implémenté 
par la couche ':utf8' qui ne vérifie pas que les sorties sont bien 
encodées).

>
> sachant que ces scripts tournent dans un contexte CGI où le STDIN ne
> doit pas être altéré puisqu'on récupère les upload par cette voie.  Et
> a priori je ne souhaite pas non plus que les entrées/sorties de
> fichier soient altérés par des encode/décode.
>
> Peut-être peut-on regrouper des choses mais par exemple, je n'ai pas
> remarqué que le module Modern::Perl comportait des options à propos de
> l'Unicode.
>
> Merci de vos commentaires.
>
> Dominique
>


Vincent


Plus d'informations sur la liste de diffusion Perl