[Perl] DBI DBD::MySQL et UTF-8
Dominique Asselineau
asseline at telecom-paristech.fr
Mer 29 Juin 17:56:45 CEST 2016
minc wrote on Wed, Jun 29, 2016 at 05:16:28PM +0200
>
>
> Le 29/06/2016 à 00:46, Philippe Bruhat (BooK) a écrit :
> >On Tue, Jun 28, 2016 at 09:03:19PM +0200, Dominique Asselineau wrote:
> >>Paul Gaborit wrote on Tue, Jun 28, 2016 at 04:35:21PM +0200
> >>>Le 28/06/2016 14:45, Dominique Asselineau a écrit :
> >>>>Paul Gaborit wrote on Sat, Jun 25, 2016 at 08:55:43AM +0200
> >>>>>Le 24/06/2016 15:50, Dominique Asselineau a écrit :
> >>>>>>Je passe tout mes codes en Unicode (encodage UTF8) et je rencontre des
> >>>>>>difficultés avec DBI/DBD::MySQL.
> Peut-être que mon expérience sur un script de backup peut donner des idées.
>
> En effet, bien que travaille en 'UTF-8' que mon script soit dans le même
> encodage,
> faisant appel à des commandes systèmes, je récupère selon les niveaux des
> réponses
> du CP-850 (system ($cmd ) = MS-DOS ) ou du latin1 ( systeme Win 7, codage
> filesystem en français avec les commandes Perl ) !
>
> Cela marche, à condition de bien contrôler les flux d'entrée et de sortie en
> les codant et décodant
> à chaque étape d'E/S.
C'est justement ce que je veux éviter de faire. J'ai quelques
dizaines de milliers de lignes de code Perl à passer en UTF-8 et pour
ce qui est des requêtes MySQL, je ne me vois pas faire des decode_utf8
sur chaque valeurs récupérées qui le nécessitent.
La doc rappelée par Paul Gaborit est en effet claire. Les valeurs
textuelles récupérées en UTF-8, devraient normalement être décodées
automatiquement pour être placées dans des strings utf8. Et si on
exécute DBI::data_string_desc dessus, pour le mot « œuf » on devrait
avoir quelque chose de la forme
UTF8 on, non-ASCII, 3 characters 4 bytes
or j'obtiens
UTF8 off, non-ASCII, 4 characters 4 bytes
à décoder donc.
>
> Peut-être qu'il y a ce genre d'étapes masquées ou implicites dans le
> problème évoqué ?
J'aimerais qu'elles soient justement implicites ...
A+
Dominique
--
Plus d'informations sur la liste de diffusion Perl