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
相关产品推荐
相关产品推荐

