我在一个xml文件中有这个字符:
<data>
<products>
<color>fumè</color>
</product>
</data>
我尝试用以下代码生成一个ElementTree实例:
string_data = open('file.xml')
x = ElementTree.fromstring(unicode(string_data.encode('utf-8')))
我得到了以下错误:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe8' in position 185: ordinal not in range(128)
(注意:这个位置并不准确,我是从一个较大的xml中抽取的)。
如何解决?谢谢
发布于 2012-09-10 18:35:19
不需要对XML进行解码,ElementTree就可以工作。XML携带它自己的编码信息(默认使用UTF-8),ElementTree为您做这项工作,输出unicode:
>>> data = '''\
... <data>
... <products>
... <color>fumè</color>
... </products>
... </data>
... '''
>>> x = ElementTree.fromstring(data)
>>> x[0][0].text
u'fum\xe8'
如果您的数据包含在文件(如)对象中,只需将文件名或文件对象直接传递给ElementTree.parse()
函数:
x = ElementTree.parse('file.xml')
发布于 2013-12-29 21:00:20
你可能在使用Requests (HTTP for Humans)时遇到了这个问题,response.text
默认解码响应,你可以使用response.content
获得未解码的数据,这样ElementTree就可以自己解码了。只要记住使用正确的编码即可。
更多信息:http://docs.python-requests.org/en/latest/user/quickstart/#response-content
发布于 2012-09-10 18:34:52
您是否尝试过使用parse
函数,而不是打开文件...(哪个BTW在它之后需要一个.read()
才能使.fromstring()
工作...)
import xml.etree.ElementTree as ET
tree = ET.parse('file.xml')
root = tree.getroot()
# etc...
https://stackoverflow.com/questions/12349728
复制相似问题