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

Python GET请求打印response.json()数据报编码错误解决方法

问题根因

这个报错和乱码不是ses.request()请求、response.json()解析环节的配置错误,核心是两个环节出了问题:

  1. requests库自动识别响应编码偶尔会出现偏差,没有正确识别RD Station接口返回的UTF-8编码内容,导致初始解码就生成了乱码
  2. 最终抛出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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:09:19