Python中JSON读取编码参数未生效?UnicodeEncodeError问题咨询
解决UnicodeEncodeError:不是读取编码被忽略,是输出编码的问题!
兄弟,你这个报错的根源不是utf-8-sig编码参数被忽略,而是发生在打印输出的环节!仔细看错误栈:UnicodeEncodeError是在print(k,v)这一行触发的,和json.load读取文件的步骤完全没关系。
为什么会这样?
你用utf-8-sig读取JSON文件时,已经正确把文件里的字节解码成Unicode字符串了。但你的终端(或者Python运行的输出环境)默认使用的是ASCII编码,当你试图打印包含非ASCII字符(比如\xb0,这是咱们常用的「度」符号°)的内容时,ASCII编码无法处理这些字符,就抛出了这个错误。
几种快速解决方法:
方法1:强制Python标准输出使用UTF-8
在代码最开头加上这两行,直接修改stdout的编码配置:import sys sys.stdout.reconfigure(encoding='utf-8')这样后续所有
print操作都会用UTF-8编码输出,特殊字符就能正常显示了。方法2:临时调整终端编码(针对Windows CMD)
如果是在Windows的命令提示符里运行代码,先执行这条命令切换终端编码为UTF-8:chcp 65001然后再运行你的Python脚本,一般就能正常打印了。
方法3:打印时显式处理字符
把print(k,v)改成显式编码后输出的形式,不过这种方法比较繁琐,不如前两种高效:print(k.encode('utf-8').decode('utf-8'), v.encode('utf-8').decode('utf-8'))
再确认一下读取环节的正确性:
你提到文件对象是<class '_io.TextIOWrapper'>,这说明open函数已经以文本模式打开了文件,encoding="utf-8-sig"参数确实生效了——读取过程完全没问题,别被错误信息误导啦!
内容的提问来源于stack exchange,提问作者i_feel_dumb
相关产品推荐
相关产品推荐

