首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ElementTree和unicode

ElementTree和unicode
EN

Stack Overflow用户
提问于 2012-09-10 18:23:26
回答 5查看 34.5K关注 0票数 21

我在一个xml文件中有这个字符:

代码语言:javascript
复制
<data>
  <products>
      <color>fumè</color>
  </product>
</data>

我尝试用以下代码生成一个ElementTree实例:

代码语言:javascript
复制
string_data = open('file.xml')
x = ElementTree.fromstring(unicode(string_data.encode('utf-8')))

我得到了以下错误:

代码语言:javascript
复制
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe8' in position 185: ordinal not in range(128)

(注意:这个位置并不准确,我是从一个较大的xml中抽取的)。

如何解决?谢谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-09-10 18:35:19

不需要对XML进行解码,ElementTree就可以工作。XML携带它自己的编码信息(默认使用UTF-8),ElementTree为您做这项工作,输出unicode:

代码语言:javascript
复制
>>> data = '''\
... <data>
...   <products>
...       <color>fumè</color>
...   </products>
... </data>
... '''
>>> x = ElementTree.fromstring(data)
>>> x[0][0].text
u'fum\xe8'

如果您的数据包含在文件(如)对象中,只需将文件名或文件对象直接传递给ElementTree.parse()函数:

代码语言:javascript
复制
x = ElementTree.parse('file.xml')
票数 11
EN

Stack Overflow用户

发布于 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

票数 35
EN

Stack Overflow用户

发布于 2012-09-10 18:34:52

您是否尝试过使用parse函数,而不是打开文件...(哪个BTW在它之后需要一个.read()才能使.fromstring()工作...)

代码语言:javascript
复制
import xml.etree.ElementTree as ET

tree = ET.parse('file.xml')
root = tree.getroot()
# etc...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12349728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档