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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 12:57:48