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

如何修复UnicodeDecodeError:utf-8无法解码字节0x89的问题

解决remove.bg API返回数据UnicodeDecodeError问题

你遇到的问题核心原因很明确:remove.bg API默认返回的是处理后的图片二进制数据(比如PNG格式,文件头就是0x89),不是JSON或纯文本格式,所以用utf-8解码必然报错,直接打印只能看到二进制乱码。

下面分两种场景给出解决方案:


场景1:直接保存处理后的图片到本地

如果你的需求是获取处理好的图片文件,直接把返回的二进制数据写入文件即可,不需要解码:

修改代码末尾的print(data.decode("utf-8"))为以下代码:

# 将二进制图片数据写入本地文件
with open("processed_image.png", "wb") as img_file:
    img_file.write(data)
print("处理后的图片已保存为 processed_image.png")

场景2:获取API响应的JSON元数据(含图片URL、错误信息等)

如果需要获取API的响应详情(比如错误提示、图片在线链接),需要在请求头中添加Accept: application/json,让API返回JSON格式的响应,而不是直接返回图片二进制:

修改代码的headers部分:

headers = {
  'X-API-Key': apikey,
  'Content-Type': 'application/json',
  'Accept': 'application/json'  # 新增这一行,指定接收JSON格式
}

处理响应数据:

替换原有的print(data.decode("utf-8"))为以下代码:

# 解码并解析JSON响应
response_data = json.loads(data.decode("utf-8"))
# 格式化打印JSON内容
print(json.dumps(response_data, indent=2, ensure_ascii=False))

# 可选:从JSON中提取图片URL并下载
image_url = response_data.get("data", {}).get("image_url")
if image_url:
    import urllib.request
    urllib.request.urlretrieve(image_url, "image_from_url.png")
    print("已通过URL下载图片到本地")

额外说明

  • 当API调用成功且未指定Accept头时,返回的是PNG/JPG等图片的二进制流,这是正常行为;
  • 如果调用失败(比如API密钥错误、图片无效),API会自动返回JSON格式的错误信息,此时即使没加Accept头,用utf-8解码也不会报错,但为了统一处理建议始终添加Accept头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:45:14