2012-02-28 10 views
3

J'ai un fichier xml, que j'ai besoin de convertir en utf8. Malheureusement, les entités contiennent du texte comme celui-ci:Python convertir html texte encodé ascii en utf8

/mytext, 

J'utilise la bibliothèque codec pour convertir les fichiers en UTF8, mais des entités html ne fonctionneront pas avec elle.

Existe-t-il un moyen facile de se débarrasser de l'encodage html?

Merci

+0

http://stackoverflow.com/questions/37486/filter-out-html-tags-and-resolve-entities-in-python – kechapito

+0

Pouvez-vous simplement passer le fichier brut en premier? – jterrace

Répondre

3

Vous pouvez passer le texte du fichier par une fonction unescape avant de passer à l'analyseur XML.

Sinon, si vous ne l'analyse syntaxique HTML, lxml's http parser fait pour vous:

>>> import lxml.html 
>>> html = lxml.html.fromstring("<html><body><p>&#047;mytext&#044;</p></body></html>") 
>>> lxml.html.tostring(html) 
'<html><body><p>/mytext,</p></body></html>' 
1

récemment en réponse ci-dessous le à une question similaire:

import HTMLParser  # html.parser in Python 3 
h = HTMLParser.HTMLParser() 
h.unescape('&#047;mytext&#044;') 

Techniquement, cette méthode est " interne "et non documenté, mais il a été dans l'API pendant un certain temps et n'est pas marqué par un trait de soulignement.

J'ai trouvé here; D'autres approches sont également mentionnées, dont BeautifulSoup est probablement le meilleur si vous ne vous occupez pas de sa "lourdeur".