[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