Python3.9使用requests加载响应为JSON时报UnicodeEncodeError错误如何解决
报错根因
该UnicodeEncodeError并非json.loads加载阶段触发,而是后续print输出时,Windows默认控制台字符集不支持\u2082(下标2字符)的编码映射导致,即使sys.stdout.encoding显示为utf-8,也可能存在控制台实际继承系统默认charmap编码的情况。
解决方法
- 方案1:显式指定requests响应编码,避免自动编码识别错误
在requests.get执行后、读取rq.text前添加编码声明:rq = requests.get(url) # 新增编码指定语句 rq.encoding = 'utf-8' rqJson = json.loads(rq.text) print(rqJson) - 方案2:修改Python输出编码规则
运行脚本前先在当前终端执行命令,开启Python全局UTF-8编码模式:set PYTHONUTF8=1
也可以直接修改打印逻辑,跳过系统字符集编码校验,直接将UTF-8编码的二进制流写入标准输出:import sys # 替换原有print语句 sys.stdout.buffer.write(json.dumps(rqJson, ensure_ascii=False).encode('utf-8') + b'\n') - 方案3:修改Windows控制台编码
运行脚本前先在终端执行命令,将控制台代码页切换为UTF-8:chcp 65001
再执行Python脚本即可正常输出。
内容的提问来源于stack exchange,提问作者E. Aly
相关产品推荐
相关产品推荐

