ElementTree.parse()中的Python UnicodeEncodeError

时间:2018-05-09 23:26:18

标签: python-2.7 unicode encoding python-requests elementtree

我正在为API编写python接口。接口必须使用python 2.7.x,使用python 3.x是不可能的。

通过requests请求调用API。在我遇到问题的特定情况下,我收到错误:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xdf' in position 24037: ordinal not in range(128)

我已经尝试过几种不太天真的方法来处理这个问题。一切都失败了。

1

tree = ElementTree().parse( StringIO(apiResult.body) )

2

parser = XMLParser(encoding="UTF-8")
tree = ElementTree().parse( StringIO(apiResult.body), parser=parser )

3

parser = XMLParser(encoding="ISO-8859-1")
tree = ElementTree().parse( StringIO(apiResult.body), parser=parser )

全部失败并显示上面显示的错误消息。在所有情况下apiResult.body都是一个字符串。我的问题是为什么在情况2和3中调用ascii编解码器,当我明确使用具有ascii以外的编码的解析器时?

当然,我怎么能解决这个问题?

1 个答案:

答案 0 :(得分:1)

这是一个python API。问题是服务器正在返回unicode,因为API没有在标头中放置Content-Type: text/html; charset=utf-8。收到后我可以用UTF-8对身体进行编码,然后就可以了。或者我可以修复API来实现它。