python 保存已解析的 xml 文档 - 编码错误
python rest saving parsed xml document - error encoding
我有一个函数可以将 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))
那个returns我一个错误:
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)
我试过编码utf 8,也没用。
谁能帮助我消除这个错误?
如果您使用 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')
我有一个函数可以将 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))
那个returns我一个错误:
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)
我试过编码utf 8,也没用。
谁能帮助我消除这个错误?
如果您使用 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')