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

Python变量编码异常:API返回正确值但Python中显示乱码求助

编码问题解决:UTF-8字符在Python中显示乱码

问题原因

你的情况是典型的编码解码不匹配:API返回的是UTF-8编码的内容,但Python的requests库在自动解码响应文本时,错误使用了Latin-1(ISO-8859-1)编码,导致UTF-8的ů(二进制为C5 AF)被当成Latin-1解码成ů。

数据库和curl显示正常,是因为它们正确识别了响应的UTF-8编码,而requests如果没从响应头拿到明确的编码声明,会 fallback 到默认的Latin-1。

解决方案

1. 强制指定响应编码为UTF-8

在解析响应前,手动设置response.encoding为utf-8,确保解码正确:

url = f"http://server/metadata/api/"
payload = json.dumps({
    "elementId": elementId,
    "fieldId": fieldId,
    "value": value
})
headers = {
    'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
# 强制指定编码为UTF-8
response.encoding = 'utf-8'
data = response.json()  # 直接用response.json()更简洁,会自动用指定编码解析
print(data)

2. 直接解码字节流

绕开requests的自动编码猜测,手动解码响应字节:

response = requests.request("POST", url, headers=headers, data=payload)
# 直接用utf-8解码字节内容
data = json.loads(response.content.decode('utf-8'))
print(data)

3. 后端API补充编码声明

从根源解决的话,建议后端在响应头中明确添加charset=utf-8,比如:

Content-Type: application/json; charset=utf-8

这样requests会自动识别UTF-8编码,无需手动设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:35:19