OVH Community, votre nouvel espace communautaire.

PERL, unicode et MySQL


Vinc
03/07/2008, 15h51
En fait non, mon problème n'est pas résolu et la commande ci-dessous ne résout rien (ou déplace le problème).

Vinc
26/06/2008, 15h09
Finalement, je me suis trouvé la réponse tout seul pour me débarrasser des é et autres qui traînaient dans mes données.

Après avoir testé dans tous les sens les librairies encode et utf8, j'ai finalement trouvé ceci :

Code:
$native_string  = pack("C*", unpack("U*", $Unicode_string));
Avec ce morceau de code, le contenue de la variable est converti en natif et ainsi débarrassé de toute référence à l'encodage. Ensuite, mes données sont de toute façon reconverties automatiquement en unicode avant d'être inséré dans la base de donnée.

Vinc
24/06/2008, 16h27
Bonjour,

Voici un problème qui me prend la tête depuis un moment

J'ai un script PERL qui, via la librairie LWP::UserAgent, charge des flux RSS qui sont parsés par XML::Parser et le résultat est rentré dans une base de donnée MySQL via DBI. Je dois dire que je ne connais pas à l'avance l'encodage des flux RSS interrogés : parfois ils sont en UTF8, parfois en LATIN1, parfois il arrive qu'ils sont mal encodés (déclarés comme étant de l'UTF8 alors qu'il semble s'agir de LATIN1 et vis versa).

J'initie la connexion avec MySQL de la façon suivante :

Code:
$dbh=DBI->connect("dbi:$dbconnection",$dbuser,$dbpass);
$dbh->{'mysql_enable_utf8'} = 1;
$dbh->do('SET NAMES utf8');
$dbh->do("SET CHARACTER SET 'utf8'");
Dans 90% des cas, tout se passe bien, mes donnés se retrouvent encodés en UTF8 dans ma base où, sinon, ils sont encodés dans le genre "& #233;" Cependant, dans certains cas, je me retrouve avec des entrées dont les caractères accentués sont mal formés (é à la place de é par exemple).

Comment forcer à coup sur l'encodage en UTF8 ?

Merci pour votre aide.