我正在为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以外的编码的解析器时?
当然,我怎么能解决这个问题?
答案 0 :(得分:1)
这是一个python API。问题是服务器正在返回unicode,因为API没有在标头中放置Content-Type: text/html; charset=utf-8
。收到后我可以用UTF-8对身体进行编码,然后就可以了。或者我可以修复API来实现它。