python rest保存解析的xml文档编码错误

2024-09-27 09:36:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个函数,它应该将xml从响应保存到文件。输入参数是响应和文件名(objNm:)

def getXml ( response, objNm):
    root = ET.fromstring(response.text)
    tree = ET.ElementTree(root)
    xmlNm = objNm + ".xml"
    tree.write(open(xmlNm, 'w'), encoding='unicode')
    print('Object {} was succsessfully created.'.format(xmlNm))

返回一个错误:

Traceback (most recent call last): File "test.py", line 56, 
    in <module> getXml(response, 'test_example') 
    File "test.py", line 17, in getXml root = ET.fromstring(response.text) 
    File "/usr/lib64/python2.7/xml/etree/ElementTree.py", line 1300, in XML parser.feed(text) 
    File "/usr/lib64/python2.7/xml/etree/ElementTree.py", line 1640, in feed self._parser.Parse(data, 0) 
    UnicodeEncodeError: 'ascii' codec can't encode characters in position 142489-142490: ordinal not in range(128)

使用root=ET.fromstring(response.text.decode('utf-8')时出错

Traceback (most recent call last):
  File "test.py", line 56, in <module>
    getXml(response, 'test_example')
  File "test.py", line 17, in getXml
    root = ET.fromstring(response.text.decode('utf-8'))
  File "/usr/lib64/python2.7/encodings/utf_8.py", line 16, in decode
     return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 142489-142490: ordinal not in range(128)

我试过编码utf8,也没用

有人能帮我消除这个错误吗


Tags: textinpytestresponselinerootxml
1条回答
网友
1楼 · 发布于 2024-09-27 09:36:10

如果您使用的是python2.7,那么python文件在默认情况下是以ascii模式打开的。您需要在文件的顶部指定# -*- coding: utf-8 -*-

其他一些可以做的事情:

调用encoded_text = response.text.encode('utf-8', 'replace'),然后将其用于fromstring(encoded_text)

测试通过:

import codecs
data = u'abcdëëaaë'
data = data.encode('utf-8', 'replace')
something = codecs.utf_8_decode(data, 'strict', True)
print something

另一种方法是在系统范围内设置utf-8,如:

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

相关问题 更多 >

    热门问题