Python GET请求打印response.json()数据报编码错误解决方法
问题根因
这个报错和乱码不是ses.request()请求、response.json()解析环节的配置错误,核心是两个环节出了问题:
- requests库自动识别响应编码偶尔会出现偏差,没有正确识别RD Station接口返回的UTF-8编码内容,导致初始解码就生成了乱码
- 最终抛出
UnicodeEncodeError: 'charmap' codec异常的直接原因是Windows默认控制台用的是GBK/CP1252这类非UTF-8编码,没法处理葡萄牙语里的ã、ç、ú这类变音特殊字符,print输出时直接报错,你看到的�替换符也是输出端编码不匹配的表现,不是接口返回的原始数据本身有问题。
解决方法
1. 修正响应解码配置
response.json()本身不支持单独传编码参数,它是基于响应对象已经解码完成的文本做JSON反序列化,你只需要在拿到响应后、调用json()方法前,手动强制指定响应编码为UTF-8即可:
response = ses.request('GET', url=url) # 强制指定响应使用UTF-8解码,避免自动识别编码出错 response.encoding = 'utf-8' data = response.json()
2. 修复终端打印的编码报错
以下方案任选其一即可解决print时的编码异常:
- 临时切换终端编码:运行脚本前,先在当前cmd/PowerShell窗口执行
chcp 65001,把终端代码页切到UTF-8,再启动脚本就不会报编码错误 - 代码内固定输出编码:在脚本最开头加两行代码,不用改终端配置,直接强制标准输出用UTF-8编码:
import sys sys.stdout.reconfigure(encoding='utf-8')
- 如果不需要在终端直接打印全量返回数据,可以直接把解析好的内容写入UTF-8编码的JSON文件存储,绕开终端输出的编码限制,注意加
ensure_ascii=False参数保留原始特殊字符,不要转成Unicode转义序列:
import json with open('campaign_data.json', 'w', encoding='utf-8') as f: json.dump(data, f, ensure_ascii=False, indent=2)
补充说明:只要正确设置了
response.encoding,解析得到的Python字典里的字符串就是正确的Unicode内容,后续做业务逻辑处理(比如存库、字段提取)都不会受影响,乱码和报错仅出现在控制台打印环节。
内容的提问来源于stack exchange,提问作者Ítalo Magalhães
相关产品推荐
相关产品推荐

