Unicode

Le
Kloug
Bonjour,
Je transforme une chaine UTF-8 [é]
avec le module Unicode::Transform
$string = utf8_to_unicode($string)
Dans le navigateur elle s'affiche [é] correctement.
Si je l'insère dans une base MySql en Latin1
(pas moyen de changer ceci) je retrouve
le caractère encodé en UTF-8 [é]
Ou est l'erreur ?
Merci d'avance pour tout conseil.
K
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Nicolas George
Le #154819
"Kloug" wrote in message
Je transforme une chaine UTF-8 [é]
avec le module Unicode::Transform
$string = utf8_to_unicode($string)


Pourquoi utiliser ce module plutôt que les modules natifs de Perl ?
Personnellement, j'ai souvent des doutes sur la bonne gestion de l'Unicode
natif de Perl par les modules tiers, même ceux dont c'est la fonction
principale.

Paul Gaborit
Le #154525
À (at) Tue, 20 Nov 2007 11:57:59 +0100,
"Kloug"
Je transforme une chaine UTF-8 [é]
avec le module Unicode::Transform
$string = utf8_to_unicode($string)
Dans le navigateur elle s'affiche [é] correctement.
Si je l'insère dans une base MySql en Latin1
(pas moyen de changer ceci) je retrouve
le caractère encodé en UTF-8 [é]
Ou est l'erreur ?


L'erreur est (me semble-t-il) de croire qu'on a besoin de
Unicode::Transform ! ;-)

La bonne question à se poser est : d'où vient cette chaîne ?

Si elle est lue dans un fichier, il suffit de lire le fichier
correctement via les encoding.

Si elle est directement dans le source, il faut placer un "use utf8;"
au début du code.

Comme ça, en interne, la chaîne sera correctement gérée par Perl.

Ensuite, reste à savoir comment la ressortir avec le bon encodage.

La doc de DBD::mysql ne le dit pas explicitement mais à moins
d'ajouter l'option 'mysql_enable_utf8', je pense que le codage par
défaut est Latin1. Donc... Il n'y a rien à faire.


--
Paul Gaborit - Perl en français -
Kloug
Le #154520
L'erreur est (me semble-t-il) de croire qu'on a besoin de
Unicode::Transform ! ;-)


En fait je traite des mails lus dans
le fichier /var/mail/comptepop
Si la balise Content-Transfer-Encoding:
du corps est à UTF-8, je transforme en Latin1
cette partie.
A l'affichage dans le navigateur c'est ok mais à l'insertion dans MySql,
du contenu affiché, damned, je retrouve l'UTF-8 initial.

J'ai résolu provisoirement en redécodant le contenu MySql à
la lecture mais mon but est d'avoir une base homogène.
Merci de toutes pistes.
K

Nicolas George
Le #154519
"Kloug" wrote in message
En fait je traite des mails lus dans
le fichier /var/mail/comptepop
Si la balise Content-Transfer-Encoding:


Tu aurais tout intérêt à utiliser une bibliothèque de décodage MIME complète
déjà faite : il y a des subtilités dans la gestion qui sont pénibles à
réimplémenter.

du corps est à UTF-8, je transforme en Latin1


Mais tu ne peux pas être sûr que ça passe : UTF-8 est strictement plus gros
que latin-1. Il vaudrait largement mieux stocker le texte sous un format
permettant de représenter Unicode en entier.

Paul Gaborit
Le #154427
À (at) 21 Nov 2007 14:56:34 GMT,
Nicolas George
"Kloug" wrote in message
En fait je traite des mails lus dans
le fichier /var/mail/comptepop
Si la balise Content-Transfer-Encoding:


Tu aurais tout intérêt à utiliser une bibliothèque de décodage MIME complète
déjà faite : il y a des subtilités dans la gestion qui sont pénibles à
réimplémenter.


Tout à fait d'accord.

du corps est à UTF-8, je transforme en Latin1



Là, il y a un problème puisque la conversion peut échouer. Que faire
dans ce cas ? Si le mail (ou une partie du mail) est en UTF8, c'est
sûrement utile (ne serait-ce que pour un e-dans-l'o ou un symbole euro
en restant en français). C'est donc impossible à faire sans perte et
j'imagine que ce n'est pas le but de perdre de l'information...

--
Paul Gaborit - Perl en français -

Publicité
Poster une réponse
Anonyme