Jupyter读取JSON文件触发UnicodeDecodeError,求可行编码方案
解决JSON文件读取UnicodeDecodeError的方案
问题根源
你当前代码的错误在于:open()未指定编码,会使用系统默认编码(Windows下为cp1252),而json.load()的encoding参数在Python 3中已废弃,不会生效——实际读取用的是cp1252,而非你预期的utf-8,这才导致解码失败。
修正后的基础代码
先在open()时指定编码,而非传给json.load():
import pandas as pd import json with open('recalls.json', encoding='utf-8-sig') as file: json_data = json.load(file)
可尝试的编码列表
如果utf-8仍报错,按优先级尝试以下编码:
- utf-8-sig:处理带BOM的UTF-8文件,Windows生成的UTF-8文件常带BOM,Chrome可能识别为普通utf-8
- latin-1:单字节编码,能完整读取所有字节,不会报错,读取后可尝试转码为其他编码
- cp1252:系统默认编码,可配合错误处理参数临时读取(如
errors='ignore'或errors='replace') - utf-16:若文件是双字节UTF-16编码(常见于部分Windows导出文件)
- gbk/gb2312:若文件包含中文,可能是国标编码
进阶尝试代码
用latin-1读取后转码
with open('recalls.json', encoding='latin-1') as file: raw_content = file.read() # 尝试转utf-8,忽略无法解码的字符 try: json_data = json.loads(raw_content.encode('latin-1').decode('utf-8', errors='ignore')) except: # 转cp1252尝试 json_data = json.loads(raw_content.encode('latin-1').decode('cp1252', errors='ignore'))
直接用pandas读取并转CSV
更高效的方式是用pandas直接处理,一步完成读取和转CSV:
import pandas as pd # 尝试指定编码读取JSON df = pd.read_json('recalls.json', encoding='utf-8-sig') # 导出为CSV,指定编码避免乱码 df.to_csv('recalls.csv', index=False, encoding='utf-8-sig')
内容的提问来源于stack exchange,提问作者rainbowunicorn
相关产品推荐
相关产品推荐

