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 :

probleme d'encodage [Fait]


Sujet :

Python

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 23
    Points : 18
    Points
    18
    Par défaut probleme d'encodage
    bonjour,

    je suis entrain de faire un petit script dans lequele, l'utilisateur est invité a entrer des données. Le programme les organise ensuite dans un fichier xml avec ElementTree en les encodant en iso-8859-15.

    le problème étant que les chaines rentré par l'utilisateur n'accepte que les caractères ascii.

    j'ai essayer de changer le #-*- coding: -*- en utf-8 ou en iso-8859-15
    j'ai aussi essayé machaine.coding('iso-8859-15')

    mais j'obtiens
    Traceback (most recent call last):
    File "/media/partage/python/xml/cmsxml.py", line 10, in -toplevel-
    titre = raw_input(u'Blabla\n\t').encode('iso-8859-15')
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
    comment faire?

  2. #2
    Membre régulier

    Profil pro
    Inscrit en
    Février 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 76
    Points : 103
    Points
    103
    Par défaut
    salut,

    Il faut créer un objet unicode à partir de la chaîne. En supposant que la chaîne d'entrée est de l'iso-8859-1 (le plus probable pour la langue française):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    titre = raw_input()
    titre = unicode(titre, "iso-8859-1") # crée un objet unicode à partir d'une chaîne dont on connait l'encodage
    titre_encode = titre.encode("iso-8859-15") # remplacer iso-8859-15 par l'encodage désiré

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    merci pour ta réponse.
    en fait j'ai réussi en modifiant le fichier de conf de python( j'ai remplacé l'encodage par défault en ascii par utf-8. maintenant plus de pb.

    a+

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Il faut créer un objet unicode à partir de la chaîne. En supposant que la chaîne d'entrée est de l'iso-8859-1 (le plus probable pour la langue française):
    Code:

    titre = raw_input()
    titre = unicode(titre, "iso-8859-1") # crée un objet unicode à partir d'une chaîne dont on connait l'encodage
    titre_encode = titre.encode("iso-8859-15") # remplacer iso-8859-15 par l'encodage désiré
    Mais comment faire sans connaître l'encodage originel? Y a t'il une méthode pour "deviner" l'encodage?

  5. #5
    Membre régulier

    Profil pro
    Inscrit en
    Février 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 76
    Points : 103
    Points
    103
    Par défaut
    Mais comment faire sans connaître l'encodage originel? Y a t'il une méthode pour "deviner" l'encodage?
    Pour deviner l'encodage exacte, non.
    Si tu connais les encodages probables de la chaine de caractères tu peux les tester un à la fois jusque quand il n'y pas d'exception lancée.
    Sinon tu te définis un encodage par défaut et avec les mots clés 'ignore' ou 'replace' un chaine unicode sera créée avec les caractères non convertibles soit omis soit remplacé par un caractère par défaut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    >>> unicode("hell\xc3\xb6", "ascii")
    Traceback (most recent call last):
      File "<stdin>", line 1, in ?
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 4: ordinal not in range(128)
    >>> unicode("hell\xc3\xb6", "ascii", "ignore")
    u'hell'
    => FAQ: http://python.developpez.com/faq/?page=Unicode

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

Discussions similaires

  1. [RSS] Problème d'encodage
    Par kivan666 dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 03/08/2006, 15h31
  2. Probleme d'encodage des caractères spéciaux
    Par pacoulitou24 dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 20/06/2006, 16h47
  3. Problème d'encodage
    Par Arnaud F. dans le forum Administration système
    Réponses: 5
    Dernier message: 26/05/2006, 22h56
  4. Problème d'encodage des caractères sous debian
    Par HNT dans le forum Administration système
    Réponses: 2
    Dernier message: 05/04/2006, 11h07
  5. Probleme avec encodage de simple quote
    Par linkowich dans le forum Langage
    Réponses: 2
    Dernier message: 31/10/2005, 13h16

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