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 :

lecture XML, problème d'encodage


Sujet :

Python

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 65
    Points : 71
    Points
    71
    Par défaut lecture XML, problème d'encodage
    Bonjour,
    Je débute un peu avec Python (2 mois) et j'ai énormément de soucis avec les encodage de caractéres.

    Je lis un fichier XML dont l'encoding est déclaré iso-8859-1, mon script python est aussi déclaré en encoding iso-8859-1.
    J'arrive a récupérer mes infos voulues dans le fichier XML mais j'obtiens une erreur lors de l'affichage avec un print.
    UnicodeEncodeError: 'ascii' codec can't encode characters: ordinal not in range (128)

    J'utilise minidom pour récuperer mes infos du fichier XML:
    self.doc=minidom.parse(self.fichier)

    Je récupére ma ligne de texte contenant des caractéres spéciaux de cette manière:
    mavariable=node.firstChild.data

    Lorsque j'enléve les caractéres spéciaux de mon fichier xml je n'ai plus de soucis.

    Je me suis documenté seulement j'ai beau suivre les conseils, mettre des encode() et des decode() je n'arrive a rien

    Une idée ?

    merci

  2. #2
    Membre averti Avatar de alexdevl
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 265
    Points : 344
    Points
    344
    Par défaut
    1°) Ton applic sort quelque chose à déterminer (unicode..)
    Tu peux essayer de le mettre dans une liste qui t'affichera une chose du genre :[u'\xe9'](si c'est de l'unicode par exemple) et rajouter le ''encode'' adapté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    # -*- coding: iso-8859-1 -*-
    a=u"é"
    print a.encode("iso-8859-1")#Il faut encode car l'impression directe est impossible 
    l=[]
    l.append(a)
    print l #Comme ceci c'est possible
    => à voir en fonction du type de caractère suivant
    http://www.michelcarrare.com/multimedia/codage-car.php

    2°) Une autre solution est, dès la lecture, de transformer en unicode pour être sur du format et faire un encode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    fichObjet = open(nomdbExt, 'rb')
    l=[]      
    for ligne in fichObjet : #Pour chaque ligne
     
        l.append(unicode(ligne,"iso-8859-1")) #Ton traitement..

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 65
    Points : 71
    Points
    71
    Par défaut
    Bonjour,
    J'ai essayé ton deuxième code mais j'obtiens toujours une erreur 'UnicodeEncodeError'.
    J'ai repris le principe, au lieu de parser le fichier, je reprend son contenus, le décode et concatène le tout dans une variable que je parse par la suite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    #!/usr/bin/python
    # -*- coding: iso-8859-1 -*-
     
    from xml.dom import minidom
     
     
    fichObjet=open('menu.xml')
    texte=''
    for ligne in fichObjet:
    	texte+=(ligne.decode('utf-8').encode('iso-8859-1'))
    doc = minidom.parseString(texte)#création du document minidom
     
    fichObjet.close()
    print texte
    Avec ce code ci-dessus, cela fonctionne seulement je ne sais pas si c'est une belle solution :s
    Je marque en résolus, puisque le problème l'est, seulement si vous avez des améliorations, je suis preneur

    merci alexdevl

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

Discussions similaires

  1. lecture xml : problème de format
    Par bebert3 dans le forum Flex
    Réponses: 1
    Dernier message: 11/03/2010, 14h09
  2. [XML]Problème d'encodage XML avec un XmlTextWriter
    Par fragmonster dans le forum VB.NET
    Réponses: 0
    Dernier message: 15/09/2009, 10h28
  3. Flash + XML : problème d'encodage
    Par Gilles F dans le forum Flash
    Réponses: 5
    Dernier message: 08/10/2007, 23h39
  4. [XML] problème d'encodage caractère €
    Par #CR-7 dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 11/01/2007, 10h45

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