Python、XML和#233类型编码

Python、XML和#233类型编码,python,xml,unicode,Python,Xml,Unicode,可能重复: 我正在使用Python阅读excel XML文档。我最终得到了很多角色,比如 é 表示各种重音字母(等等)。有没有一种简单的方法将这些字符转换为utf-8 如果您只想将HTML实体解析为其unicode等价物: >>> import HTMLParser >>> parser = HTMLParser.HTMLParser() >>> parser.unescape('é') u'\xe9' >

可能重复:

我正在使用Python阅读excel XML文档。我最终得到了很多角色,比如 é


表示各种重音字母(等等)。有没有一种简单的方法将这些字符转换为utf-8

如果您只想将HTML实体解析为其unicode等价物:

>>> import HTMLParser
>>> parser = HTMLParser.HTMLParser()
>>> parser.unescape('é')
u'\xe9'
>>> print parser.unescape('é')
é

这是针对Python2.x的,对于3.x,导入是
import html.parser

使用此QandA和另一个QandA中的提示,我有一个似乎有效的解决方案。它获取整个文档并从文档中删除所有html实体

import re
import HTMLParser

regexp = "&.+?;" 
list_of_html = re.findall(regexp, page) #finds all html entites in page
for e in list_of_html:
    h = HTMLParser.HTMLParser()
    unescaped = h.unescape(e) #finds the unescaped value of the html entity
    page = page.replace(e, unescaped) #replaces html entity with unescaped value

你需要提供更多的细节。通常,如果您了解发生了什么,用python进行编码和解码是相对容易的。特别是,您使用的是python 2还是python 3,是否有字节字符串或Unicode字符串,如果是字节字符串,它们在哪个字符集中?(这也可能有助于了解您正在使用哪个模块读取/解析文档。)感谢Marijn的快速响应。我想我面临的主要问题是我不知道这是什么编码。我感觉它不是真正的“编码”,而是xml特有的东西。至于更多的信息,我真的没有。我有一个带有“编码”的名字列表,比如上面的那个。名称来自不同的国家,因此,不同的重音字符。使用Python2,字符串以字节形式出现(字符串来自excel xml文件),但我使用.decode(“utf-8”)将其转换为unicode,集合为utf-8.OK,因此您已经正确解码了unicode字符串,除了一些字符作为XML实体引用转义,而不是直接作为字符使用。根据您如何进行XML解析,您可以在解析时进行解析;否则,这看起来肯定像是另一个问题的dup。这是一个未记录的函数,恰好在
HTMLParser
的CPython实现中,直到2.6/3.0或2.7/3.1(我忘了是哪个)它才真正正常工作。所以我不认为这是一个理想的解决方案,除了一个快速而肮脏的黑客。在这个问题上有更好的解决方案(和这个一样)。使用这个QandA和另一个QandA中的技巧,我有下面的解决方案,看起来很有效:显然,上面代码的一个缺点是,如果同一个html实体在页面中出现多次(几乎总是如此),上述代码将多次运行相同的replace调用。这是一个简单的修复方法,只需在运行replace循环之前删除html集合列表中的所有重复。