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

瑞典字符解码异常:是API侧故障还是我端请求处理流程有误?

问题原因

response.text 是requests库基于自动推断的编码将响应字节解码得到的字符串,出现�或�是解码过程中遇到不符合目标编码规范的字节序列时的默认替换占位符。即使响应头声明了charset=UTF-8,也可能因为requests自动编码推断出错、API实际返回编码与声明不一致两种情况导致该问题。

修复方案

第一步:强制指定响应编码,覆盖自动推断结果

requests的自动编码推断逻辑优先级可能高于响应头的charset声明,首先尝试手动指定编码为utf-8后再读取响应文本:

response = requests.get(url, headers={'Content-Type': 'application/json'})
# 新增这行,强制用utf-8解码
response.encoding = 'utf-8'
print(response.text)

第二步:手动解码原始响应字节,自定义错误处理逻辑

如果第一步操作后仍存在占位符,说明API返回的原始字节中确实存在不符合utf-8规范的序列,你可以直接操作response.content(原始字节对象)自定义解码规则:

# 可选errors参数说明:
# strict:遇到非法字节直接抛出UnicodeDecodeError,可用于确认是否真的存在编码不匹配问题
# backslashreplace:将非法字节转义为\xXX格式,保留原始字节信息方便后续排查
# ignore:直接删除非法字节,仅保留合法部分
text = response.content.decode('utf-8', errors='backslashreplace')

第三步:校验是否为API侧问题

如果用errors='strict'解码时抛出UnicodeDecodeError,基本可以判定为API侧错误:接口声明返回UTF-8编码,但实际返回内容包含非UTF-8编码的字节(比如混杂了GBK编码字符、传输过程字节损坏)。
你可以尝试用其他常见编码(如GB18030)解码测试,若解码后无乱码即可确认API实际编码与声明不一致,需要联系接口提供方修复,也可以直接用匹配的实际编码解码适配。

保存文件说明

你当前的文件保存代码已指定encoding='utf-8',逻辑正确,只要解码得到的文本正确,保存时不会引入新的编码问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:45:05