En unicode, une partie de mon code python me donne "é" pour "é" et une autre me donne "\xe9" pour le même caractère.
Je cherche à garder la seconde forme partout mais j'y arrive pas.
Merci de m'aider.
En unicode, une partie de mon code python me donne "é" pour "é" et une autre me donne "\xe9" pour le même caractère.
Je cherche à garder la seconde forme partout mais j'y arrive pas.
Merci de m'aider.
*?
Si je ne me plante pas, la forme é est la représentation “8bits brute” de la séquence unicode pour é, alors que \xe9 en est sa forme échappée (avec sa valeur hexadécimale).
Donc, telle quelle, ta question est incompréhensible –*normalement, tu ne devrais avoir qu’une seule des deux représentations à la fois… À moins qu’une partie de ton code (de tes fichiers, en fait) ne soit encodée en 8bits, genre latin-1 et consorts…
De toute façon, plus de détails et un échantillon de code avec ces fameux Ã@ et \xe9 seraient bienvenus*!
Mon programme est assez compliqué et est composé de deux parties:
- un client web et
- un serveur.
Sur le serveur, lorsque je communique avec la base, j'ai la deuxième forme et tout va bien. Mais lorsque les données viennent du client web, je crois que c'est le javascript qui me donne la première forme. Peut être que ces infos vous donne une idée.
Merci pour votre aide.
Bonjour,
"é" est la lettre "é" encodée en utf-8. C'est aussi "\xc3\xa9" en hexadécimal (codage en 2 octets).
"\xe9" est la lettre "é" encodée en latin1, et présentée sous sa forme hexadécimale.
Ces 2 représentations apparaissent lors d'affichages, en fonction de l'encodage de la console d'affichage, et de l'objet Python dans lequel se trouve la chaine ("é" ne s'affiche pas comme dans ["é"]).
Il faut donc convertir les chaines à manipuler pour les afficher dans le bon encodage.
Petit exemple: si la chaine x contient le "é" qui s'affiche "é", la conversion x.decode('utf-8').encode('latin1') le transformera en "é" latin.
Tyrtamos
Merci tyrtamos,
Mon problème est résolu mais je vais donner plus d'infos sur le problème dans le but d'aider d'autres personnes qui seront dans la même situation.
J'ai un client et un serveur avec BDD PGSQL et naturellement mes requêtes sont exécutées sur le serveur!.
Au démarrage du programme, je fais un ensemble de recherches dans la base. Ces requêtes marchent bien PARCE QUE dans le __init__.py du serveur, je fais
Donc je n'ai que du "\xc3\xa9" pour "é" sur le serveur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 import sys sys.setdefaultencoding('utf-8')
Après je crée des requêtes dynamiquement sur le clients grâce au évènements javascript sur la page. Et c'est le javascript qui retournait le "é" sous la forme "é" (j'ai fais unpour le voir).
Code : Sélectionner tout - Visualiser dans une fenêtre à part alert
Alors solution : sur la base de l''idée de tyrtamos, j'ai fait:
.
Code : Sélectionner tout - Visualiser dans une fenêtre à part resultat = dict( query = t_query.encode('latin-1'))
Encoder en "latin-1" pour le JS et ainsi à la récupération de query, je fais :
Ainsi tout est bon.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if isinstance(query, basestring): query = unicode(query).encode('utf-8')
Je vous remercie tous et j'espère avoir été claire dans ce poste afin d'éviter le même problème à d'autres personnes.
Partager