Parser un fichier XML contenant des accents [Python] - Python - Programmation
Marsh Posté le 12-10-2008 à 14:45:29
Shadew a écrit : Bonjour, je cherche à parser un fichier XML contenant des accents. J'éprouve des problèmes d'encodage et je trouve assez difficilement des informations sur le net. J'utilise pour le moment minidom pour parser un fichier encodé en ISO-8859-1. Voici mon code:
|
C'est censé faire quoi cette merde?
Marsh Posté le 12-10-2008 à 16:06:53
Euh...C'est censé encoder la chaîne en ISO, pour que python puisse interpréter les symboles accentués (j'ai aussi essayé avec la fonction unicode mais ça fonctionne pas mieux)
Marsh Posté le 12-10-2008 à 16:15:21
Shadew a écrit : Euh...C'est censé encoder la chaîne en ISO |
Ta chaîne est déjà encodée dans le fichier, c'est le principe de lire un fichier, c'est à ça que servent les encodages
Donc là tu réencodes un truc encodé, bizarrement ya des chances que ça fasse des trucs pas voulus.
Ce dont tu as besoin ici, c'est de décoder ta chaîne pas de l'encoder, et accessoirement
Code :
|
c'est complètement con, à remplacer par
Code :
|
De plus ton try/except n'a aucun intérêt, donc
Code :
|
un truc du style.
Marsh Posté le 12-10-2008 à 16:32:20
J'ai essayé ainsi mais j'obtiens le même résultat. Je sais pas si ça peut influencer, mais en tête de fichier j'ai
Code :
|
J'avais dû le mettre car j'affiche des é et des à et si je le met pas, python me tire la figure en me disant qu'il sait pas comment c'est encodé.
Marsh Posté le 12-10-2008 à 16:34:47
Shadew a écrit : J'ai essayé ainsi mais j'obtiens le même résultat. Je sais pas si ça peut influencer, mais en tête de fichier j'ai
|
Ca n'a aucun rapport, ça c'est l'encodage de ton fichier python, le problème ici c'est l'encodage de ton fichier XML. T'es sûr que c'est de l'iso-8859-1?
Marsh Posté le 12-10-2008 à 16:49:26
Oui, quand je l'ouvre avec IE sans mettre d'encodage ou en mettant utf-8 ça foire, et quand je met iso-8859-1, il s'ouvre correctement et les accents sont affichés correctement.
Si je fais
Code :
|
il l'affiche sur la console sans problème.
Je sais pas si ça peut aider mais j'utilise python 2.5 (j'ai besoin de la bibli qui gère le mysql et qui n'est pas encore dispo pour les version >2.5)
Marsh Posté le 12-10-2008 à 17:30:31
Shadew a écrit : Oui, quand je l'ouvre avec IE sans mettre d'encodage ou en mettant utf-8 ça foire, et quand je met iso-8859-1, il s'ouvre correctement et les accents sont affichés correctement.
|
T'as essayé d'utiliser parse plutôt que parseString? Et t'as absolument besoin de minidom ou tu peux regarder du côté d'ElementTree?
Marsh Posté le 12-10-2008 à 17:46:29
masklinn a écrit :
|
J'ai déjà essayé parse, et avec ça j'obtiens:
Code :
|
(line 2, column18 c'est quand il rencontre l'accent)
J'ai pas forcément besoin d'utiliser minidom mais avec ElementTree, j'obtiens la même erreur que celle 3 lignes plus haut :s
Marsh Posté le 12-10-2008 à 17:48:46
Ben no se alors, si tu peux fournir le fichier XML (directement, sans coller son contenu ici, j'ai besoin de l'original) je peux essayer de regarder, sinon pas vraiment.
Marsh Posté le 12-10-2008 à 18:19:12
Je t'ai envoyé le fichier sur ton adresse hotmail. Merci de ton aide !!
Marsh Posté le 12-10-2008 à 19:22:34
Bon, trouvé, en fait ElementTree.parse et ElementTree.fromstring prennent du texte encodé (et je présume que minidom est pareil) et refusent les documents unicode. Sauf que dans ET 1.2.6, effbot ne fournit pas de moyen de forcer un encoding, et tire celui-ci du document.
Or ton document n'indique aucun encoding dans son prologue (le machin <? xml ... ?> en haut du fichier), ce qui indique qu'il est encodé en utf-8 (ou en utf-16) d'après la spec XML (ton document est donc complètement illégal et malformé).
Tu as donc 3 possibilités:
note 1: encoding dans le prologue
Code :
|
note que ton encoding est peut-être du windows-1252 plutôt que du 8859-1
note 2: encoding & ET 1.3
Code :
|
note 3: via BeautifulSoup
Code :
|
Marsh Posté le 12-10-2008 à 20:44:00
Kikoo, c'est nickel, j'ai réussi à ouvrir mon fichier grâce à toi!!! Merci beaucoup!!!!
Bonne soirée!!
Marsh Posté le 12-10-2008 à 22:44:55
Avec quelle méthode?
Marsh Posté le 13-10-2008 à 09:57:29
En réalité, j'ai commencé avec la 1 mais ça fonctionnait pas avec ma version de ET, j'ai donc voulu télécharger la dernière version de ET (1.3), mais il fallait commencer à utiliser svn co, etc pour l'installer. Et comme je souhaite que cela reste assez simple à installer pour n'importe quel quidam, je me suis rabattu sur la 3. BS ne demande qu'un rajout d'un fichier dans le dossier contenant Python.
Marsh Posté le 12-10-2008 à 10:25:53
Bonjour, je cherche à parser un fichier XML contenant des accents. J'éprouve des problèmes d'encodage et je trouve assez difficilement des informations sur le net. J'utilise pour le moment minidom pour parser un fichier encodé en ISO-8859-1. Voici mon code:
Et voici le code d'erreur:
J'ai déjà essayé pas mal de combinaisons avec les fonctions encode et decode mais rien ne fonctionne :s Quelqu'un pourrait-il m'aider svp?
Merci beaucoup!!
Message édité par Shadew le 12-10-2008 à 10:26:32