Bonjour,
Je transforme une chaine UTF-8 [=C3=A9]
avec le module Unicode::Transform
$string =3D utf8_to_unicode($string)
Dans le navigateur elle s'affiche [=E9] correctement.
Si je l'ins=E8re dans une base MySql en Latin1=20
(pas moyen de changer ceci) je retrouve
le caract=E8re encod=E9 en UTF-8 [=C3=A9]
Ou est l'erreur ?
Merci d'avance pour tout conseil.
K
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.
"Kloug" wrote in message <4742bdc5$0$27377$ba4acef3@news.orange.fr>:
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.
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
À (at) Tue, 20 Nov 2007 11:57:59 +0100, "Kloug" écrivait (wrote):
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 - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) Tue, 20 Nov 2007 11:57:59 +0100,
"Kloug" <klougfr-news@yahoo.fr> écrivait (wrote):
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 - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
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 - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Kloug
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
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
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
"Kloug" wrote in message <47443ff7$0$27369$:
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.
"Kloug" wrote in message <47443ff7$0$27369$ba4acef3@news.orange.fr>:
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.
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
À (at) 21 Nov 2007 14:56:34 GMT, Nicolas George <nicolas$ écrivait (wrote):
"Kloug" wrote in message <47443ff7$0$27369$:
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 - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) 21 Nov 2007 14:56:34 GMT,
Nicolas George <nicolas$george@salle-s.org> écrivait (wrote):
"Kloug" wrote in message <47443ff7$0$27369$ba4acef3@news.orange.fr>:
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 - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) 21 Nov 2007 14:56:34 GMT, Nicolas George <nicolas$ écrivait (wrote):
"Kloug" wrote in message <47443ff7$0$27369$:
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 - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>