You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解码字符触发UnicodeDecodeError,请求排查Python代码问题

问题分析与解决方案

你的代码触发UnicodeDecodeError的核心原因是逐块解码utf-8字节流的方式错误。

utf-8是多字节编码,一个字符可能占用1到4个字节。当你通过for i in response按chunk读取字节并单独对每个chunk调用decode('utf-8')时,很容易出现某个chunk的末尾刚好截断了一个多字节字符的情况——比如你遇到的0xd0,它是utf-8中西里尔字母等字符的第一个字节,后面还需要跟另一个字节才能组成完整的字符,单独解码这个不完整的字节序列自然会触发解码错误。

正确的处理方式有这几种:

  • 最简单的方式:直接用response.text
    Requests库已经内置了完善的编码处理逻辑,会自动根据响应头的Content-Type推断编码,帮你完成解码工作:

    response = requests.post('LINK-TO-API', headers=headers, data=data)
    result = response.text
    
  • 手动获取全部字节后再解码
    如果需要明确指定编码(比如响应头没正确标识编码),可以先获取完整的字节内容,再一次性解码:

    response = requests.post('LINK-TO-API', headers=headers, data=data)
    result = response.content.decode('utf-8')
    
  • 如果必须流式处理(大响应)
    如果你因为响应太大需要流式读取,那应该先把所有字节块拼接成完整的字节序列,再统一解码,而不是逐块解码:

    response = requests.post('LINK-TO-API', headers=headers, data=data, stream=True)
    byte_data = b''
    for chunk in response.iter_content(chunk_size=1024):
        byte_data += chunk
    result = byte_data.decode('utf-8')
    

这样就能避免因为截断多字节字符导致的解码错误啦。

内容的提问来源于stack exchange,提问作者streetCoder3127917

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:45:18