Python 3.x Python请求utf-8 post响应获取ascii解码错误

Python 3.x Python请求utf-8 post响应获取ascii解码错误,python-3.x,encoding,utf-8,python-requests,decoding,Python 3.x,Encoding,Utf 8,Python Requests,Decoding,我通过python请求向RESTful api发送post请求,有时在r.text、r.content和requests.utils.get_unicode_from_response(r)操作中会出现以下错误 我在用蟒蛇3 r是: 错误消息是: 'ascii' codec can't encode character '\u015f' in position 133: ordinal not in range(128) (字符和位置信息根据不同的请求而变化,但消息的其余部分是相同的。) 我试

我通过python请求向RESTful api发送post请求,有时在r.text、r.content和requests.utils.get_unicode_from_response(r)操作中会出现以下错误

我在用蟒蛇3

r是:

错误消息是:

'ascii' codec can't encode character '\u015f' in position 133: ordinal not in range(128)
(字符和位置信息根据不同的请求而变化,但消息的其余部分是相同的。)

我试图提取post响应的编码信息,他们都告诉我编码是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 ...}

如何解码消息?

响应由utf-8编码的字符串字节组成,其中可能包含ASCII表中未包含的字符。如果发生这种情况,你会得到上面提到的错误。因此,您可以忽略错误

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

或者将响应处理为utf-8字符串,因为utf-8字符串是Unicode。您必须将其转换为字符串

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

2018年9月27日发生变化。我发现在不同的平台上,这可能是一个广泛的问题。尤其是在windows上。

r.text.encode('ascii','ignore')遇到相同的错误:“ascii'编解码器无法对96位的字符'\u015 f'进行编码:序号不在范围内(128)r.text.encode('ascii','ignore'))得到了相同的错误:“ascii”编解码器无法对位置96处的字符“\u015 f”:序号不在执行代码的范围(128)@Selimİmer内。这似乎是一个广泛的问题。我可以在sublime上输出
њ
,但它在CMD上不起作用。代码在darwin python3环境中执行。这个命令对我也有效。但是,当我对从服务器得到的响应执行它时,它返回ascii编码错误。
("\u045a".encode()).decode("gbk") #using gbk cause question running on windows