【问题标题】:Python requests utf-8 post response gets an ascii decode errorPython 请求 utf-8 后响应得到一个 ascii 解码错误
【发布时间】:2019-03-01 11:53:54
【问题描述】:

我通过 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)

(不同请求时\字符和位置信息会发生变化,但消息的其余部分是相同的。)

我试图提取 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 ...}

我应该如何解码这些消息?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • r.text.encode('ascii', 'ignore') 得到相同的错误:'ascii' 编解码器无法在位置 96 编码字符 '\u015f':序数不在范围内( 128)
    【解决方案2】:

    \u015f 是 Unicode。你必须把它转换成字符串

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

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

    【讨论】:

    • r.text.encode('ascii', 'ignore') 得到相同的错误:'ascii' 编解码器无法在位置 96 编码字符 '\u015f':序数不在范围内( 128)
    • @Selimİmer 您执行代码的位置。这似乎是一个广泛的问题。我可以在我的 sublime 上输出 њ 但它在 cmd 上不起作用
    • 代码在darwin python3环境下执行。该命令也适用于我。但是,当我对从服务器获得的响应执行它时,它会返回 ascii 编码错误。
    猜你喜欢
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多