Python请求utf-8发布响应获取ascii解码错误

时间:2018-09-25 19:11:13

标签: python-3.x encoding utf-8 python-requests decoding

我通过python请求将发布请求发送到RESTful api,有时在r.text,r.content和requests.utils.get_unicode_from_response(r)操作中遇到以下错误。

我正在使用python3。

r是:

r = requests.post(...)

,错误消息是:

'ascii' codec can't encode character '\u015f' in position 133: ordinal not in range(128)

(\字符和位置信息根据不同的请求而变化,但是消息的其余部分相同。)

我尝试提取回复的编码信息,他们都告诉我编码采用utf-8,但我无法解码响应,也无法理解utf-8编码字节为什么会出现ascii错误(而不是utf-8错误)。

以下是我尝试找出解码方法的方法:

>>> r.encoding
>>> utf-8

>>> chardet.detect(r.content)
>>> {'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}

>>> r.headers
>>> {... 'Content-Type': 'application/json; charset=utf-8 ...}

我应该如何解码消息?

2 个答案:

答案 0 :(得分:1)

响应是一组utf-8编码的字符串字节,其中可能包含不在ASCII表中的字符。如果发生这种情况,您将得到上述错误。因此您可以忽略错误

r.text.encode('ascii', 'ignore')

或将响应作为utf-8字符串处理

答案 1 :(得分:0)

\u015f是Unicode。您必须将其转换为字符串

("\u045a".encode()).decode("gbk") #using gbk cause question running on windows

2018年9月27日更改。我发现在不同的平台上可能是一个广泛的问题,尤其是在Windows上。