URL: https://linuxfr.org/forums/programmation-python/posts/python-xml-et-encodage-de-caract%C3%A8res Title: Python, XML et encodage de caractères Authors: lukasC Date: 2011年01月31日T23:30:05+01:00 Tags: debian Score: 0 Bonjour à tous. Depuis quelques jours, je m'efforce de coder un script python capable d'interpréter les différentes données 'XML' provenant de la base de données médicale "Pubmed" ( [http://www.ncbi.nlm.nih.gov/pubmed](http://www.ncbi.nlm.nih.gov/pubmed) ). L'un des outils de la NCBI (National Center for Biotechnology Information), via l'un de leur outils en PERL ( [http://eutils.ncbi.nlm.nih.gov/eutils_example.pl](http://eutils.ncbi.nlm.nih.gov/eutils_example.pl) ), permet de récupérer un fichier XML contenant les différentes informations relatives à un article. Voici l'entête des fichiers XML récupérés avec le script en PERL (le .dtd n'est pas plus exhaustif): <?xml version="1.0"?> <!DOCTYPE PubmedArticleSet PUBLIC "-//NLM//DTD PubMedArticle, 1st January 2011//EN" "[http://www.ncbi.nlm.nih.gov/entrez/query/DTD/pubmed_110101.d(...)](http://www.ncbi.nlm.nih.gov/entrez/query/DTD/pubmed_110101.dtd">) <PubmedArticleSet> J'utilise actuellement une Debian Squeeze (python v2.6.6) et l'entête de mon script comporte # -*- coding: utf-8 -*- Etant donné l'utilisation prévisiblement basique de l'API XML, mon choix s'est porté sur minidom. La commande "locale" ne rapporte que l'utilisation de : fr_FR.UTF-8 Voici la portion de code qui me pose problème : 203 fsock = open('myfile.xml') 204 xmlEutils = minidom.parse(fsock) 205 fsock.close() Et voici l'erreur générée : Traceback (most recent call last): File "./test.py", line 204, in xmlEutils = minidom.parse(fsock) File "/usr/lib/python2.6/xml/dom/minidom.py", line 1918, in parse return expatbuilder.parse(file) File "/usr/lib/python2.6/xml/dom/expatbuilder.py", line 928, in parse result = builder.parseFile(file) File "/usr/lib/python2.6/xml/dom/expatbuilder.py", line 207, in parseFile parser.Parse(buffer, 0) xml.parsers.expat.ExpatError: not well-formed (invalid token): line 35, column 78 La ligne 35 est la suivante (à l'indentation près) : "Intensive Care Unit, University Hospital Ambroise Paré, Faculté de Médecine Paris Ile de France Ouest, Université de Versailles Saint Quentin en Yvelines, Boulogne, France." La colonne 78 représente le "r" de "Paré", soit juste avant un caractère accentué. J'obtiens une erreur identique avec un fichier différent : xml.parsers.expat.ExpatError: not well-formed (invalid token): line 39, column 33 La ligne 39, toujours à l'indentation près est la suivante : "Jesús" Sur la colonne 33 se situe le premier 's' de "Jesús" Le traitement d'articles dénués de caractères accentués ou "exotiques" s'effectue sans problème. S'agissant d'un problème vraisemblablement lié à l'encodage de caractères, j'ai consulté d'innombrables pages relatives à ce sujet, .... sans aucun succès. Aussi, je remercie par avance la personne qui pourra m'aider à résoudre ce problème.