Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

mySQL, Perl et UTF8

4 réponses
Avatar
paul POULAIN
Bonjour,

Oui, je sais, je reviens avec mon problème qui traîne depuis 1 semaine au
moins. Excusez moi de vous importuner avec ça.
J'ai avancé sur plusieurs points, mais je reste bloqué sur mySQL / Perl en
UTF8.

Si je paramètre mysql pour causer en utf8, que je fais un
Encode::decode_utf8() sur chaque lecture dans mySQL, tout va bien, je lis
de l'utf8 que je peux manipuler et afficher.

Si je me contente de paramétrer mySQL, SANS faire d'Encode::decode_utf8, je
récupère des cochonneries.

Par exemple, sur le smiley (\xe2\x98\xba)
sans le Encode::decode_utf8, je récupère la valeur :
\xc3\xa2\xc2\x98\xc2\xba
que je ne comprends pas trop :-(

Et si je lis bien
http://marc.theaimsgroup.com/?l=msql-mysql-modules&m=111970179409036&w=2
et les fils que l'on peut trouver à partir de là, il y a un bug dans le
DBD::mysql lorsque l'on est en utf8 :-(

Est-ce que je comprends mal, ou bien ???


PS : il semble que sous windows ca fonctionne correctement, pour une raison
qui m'échappe. En tous cas, j'ai constaté sur une machine sous windows 2003
située en turquie (donc avec plein d'utf8) que ca fonctionnait !
--
Paul

4 réponses

Avatar
Nicolas George
paul POULAIN wrote in message <dtffv0$142a$:
Si je paramètre mysql pour causer en utf8, que je fais un
Encode::decode_utf8() sur chaque lecture dans mySQL, tout va bien, je lis
de l'utf8 que je peux manipuler et afficher.

Si je me contente de paramétrer mySQL, SANS faire d'Encode::decode_utf8, je
récupère des cochonneries.


Tu devrais regarder ce que dit « Encode::is_utf8 » sur les chaînes
retournées par MySQL dans les deux cas.

Avatar
paul POULAIN
Nicolas George wrote:

paul POULAIN wrote in message <dtffv0$142a$:
Si je paramètre mysql pour causer en utf8, que je fais un
Encode::decode_utf8() sur chaque lecture dans mySQL, tout va bien, je lis
de l'utf8 que je peux manipuler et afficher.

Si je me contente de paramétrer mySQL, SANS faire d'Encode::decode_utf8,
je récupère des cochonneries.


Tu devrais regarder ce que dit « Encode::is_utf8 » sur les chaînes
retournées par MySQL dans les deux cas.


J'ai négligé de rappeler que :
* je sais que j'ai de l'utf8.
* l'application est intégralement écrite, elle est, disons, importante, et
l'objectif est de passer en utf8 sans avoir à intervenir sur tous les
scripts.

enfin, pour info, nous souhaitons que l'appli soit indépendante de mySQL
pour pouvoir être déployée sur autre chose. Donc nous ne voulons pas faire
de truc spécifique mySQL. Que du DBI standard.
--
Paul


Avatar
Nicolas George
paul POULAIN wrote in message <dtfj5b$15kb$:
J'ai négligé de rappeler que :
* je sais que j'ai de l'utf8.


Oui, mais la fonction Encode::is_utf8 ne sert pas à ça (elle n'est pas bien
nommée), elle sert à savoir si Perl considère les chaînes en question comme
des chaînes d'octets ou comme des chaînes de caractères Unicode. Ça fait une
différence importante.

Dans le cas présent, je pense que le plus fiable est de parler au module DBI
uniquement avec des chaînes d'octets, encodées dans l'encodage attendu par
la base de données (donc UTF-8), et faire la conversion en chaînes Unicode
(avec Recode) immadiatement avant l'entrée / après la sortie du module DBI.

Avatar
Frantz Dorsemaine
Nicolas George <nicolas$ écrivait
news:dtfkb5$1604$:

paul POULAIN wrote in message <dtfj5b$15kb$:
J'ai négligé de rappeler que :
* je sais que j'ai de l'utf8.


Oui, mais la fonction Encode::is_utf8 ne sert pas à ça (elle n'est pas
bien nommée), elle sert à savoir si Perl considère les chaînes en
question comme des chaînes d'octets ou comme des chaînes de caractères
Unicode. Ça fait une différence importante.

Dans le cas présent, je pense que le plus fiable est de parler au
module DBI uniquement avec des chaînes d'octets, encodées dans
l'encodage attendu par la base de données (donc UTF-8), et faire la
conversion en chaînes Unicode (avec Recode) immadiatement avant
l'entrée / après la sortie du module DBI.



test DBD::mysqlPP