Le pb de l'encodage c'est une grosse merde quand on est seul. On sait pas trop où on en est.
Déjà, première chose: quand on fait du debug et qu'on veut afficher une variable string, on fait pas
Mais
Code :
print "%s" % variable
|
De même, si on veut voir le contenu d'un tableau, alors surtout pas
Mais
Code :
for x in tableau: print "%s" % x
|
Parce que le formatage "%s" cherche à convertir la chaine à ce qui est le plus représentatif
Exemple
Code :
tableau=("ééé",) print tableau for x in tableau: print "%s" % x
|
Le premier print traitant un tableau affichera le code ascii des "é" alors que le second print traitant une chaine convertira le code en vrais caractères. J'ai galéré longtemps avant de comprendre ça.
De plus, afficher aussi type(var) peut être pas mal. Car si la variable est codée en string pure, ce sera "type str" alors que si elle est codée en unicode, ce sera "type unicode".
Code :
for x in tableau: print "[%s] %s" % (x, type(x))
|
On arrive au type unicode. là, je te recommande d'aller lire cette page http://pythonfacile.free.fr/python/unicode.html qui m'a bien servi.
J'en ai conclu que pour avoir un truc souple, il valait mieux stocker en interne en type unicode. Pour ça, t'as une fonction
si ta chaine est ascii pur => string=unicode(string, "latin1" )
si ta chaine est utf-8 => string=unicode(string, "utf-8" )
Au final, ta chaine sera de type unicode (code universel)
Ensuite, si tu veux la convertir en ascii => string.encode("latin1" )
Et si tu veux la convertir en utf-8 => string.encode("utf-8" )
Il existe aussi une fonction string.decode("utf-8" ) => ça te décode une chaine de type utf-8 pour la convertir en string classique. Et idem avec string.decode("latin-1" )
J'espère qu'avec ça, tu arriveras à t'en sortir. Concernant la bdd MySQL de type latin-1, là je peux pas t'aider. je sais pas comment MySQL gère ses trucs. Mais si tu veux une bdd costaud, je te conseillerais plutôt PostgreSQL. Pas forcément pour l'encodage mais plus pour ce qui est de la gestion des index ou des foreign-keys sur champs composés...
Message édité par Sve@r le 18-06-2010 à 19:29:25
---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.