IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

"é" = "é ou "\xe9"


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 12
    Par défaut "é" = "é ou "\xe9"
    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.

  2. #2
    Membre Expert

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Par défaut
    *?

    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*!

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 12
    Par défaut
    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.

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    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

  5. #5
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Bonjour.

    Citation Envoyé par stidiovip Voir le message
    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.
    Pourrais-tu nous donner un ECM (Exemple Complet Minimal) montrant ton problème ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 12
    Par défaut
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    import sys
    sys.setdefaultencoding('utf-8')
    Donc je n'ai que du "\xc3\xa9" pour "é" sur le serveur.
    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 un pour le voir).
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if isinstance(query, basestring):
                      query = unicode(query).encode('utf-8')
    Ainsi tout est bon.
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo