如何正确加载含非UTF-8编码的JSON文件到Python中

大芳君_7764

大芳君_7764

2026-10-09

643人浏览

原创

如何正确加载含非UTF-8编码的JSON文件到Python中

当使用json.load()读取JSON文件时遇到UnicodeDecodeError: 'utf-8' codec can't decode byte...,本质是文件实际编码与Python默认UTF-8解码不匹配,需显式指定正确编码(如GBK、ISO-8859-1等),推荐用chardet自动检测。

当使用json.load()读取json文件时遇到unicodedecodeerror: 'utf-8' codec can't decode byte...,本质是文件实际编码与python默认utf-8解码不匹配,需显式指定正确编码(如gbk、iso-8859-1等),推荐用chardet自动检测。

在Python中加载JSON文件看似简单,但一旦文件并非标准UTF-8编码(例如由某些设备导出、Windows记事本保存或旧系统生成的JSON),就会触发UnicodeDecodeError——正如你遇到的错误:'utf-8' codec can't decode byte 0xcc in position 24: invalid continuation byte。该报错明确指出:Python尝试以UTF-8解码字节0xcc失败,说明文件实际使用了其他编码(如GBK、UTF-16、ISO-8859-1等)。

✅ 正确做法不是盲目修改打开模式或跳过错误,而是先探测真实编码,再以对应编码安全读取。推荐使用轻量可靠的第三方库 chardet(安装命令:pip install chardet):

import json
import chardet

# 步骤1:以二进制模式读取原始字节流
with open("test11.json", "rb") as f:
    raw_bytes = f.read()

# 步骤2:自动检测编码(注意:chardet返回的是推测结果,置信度通常较高)
detected = chardet.detect(raw_bytes)
encoding = detected["encoding"] or "utf-8"  # fallback to utf-8 if uncertain
print(f"Detected encoding: {encoding} (confidence: {detected['confidence']:.3f})")

# 步骤3:以检测到的编码重新打开并解析JSON
with open("test11.json", "r", encoding=encoding) as f:
    data = json.load(f)
    print("✅ JSON loaded successfully:", type(data), list(data.keys())[:5])

? 重要注意事项:

testing-python
testing-python

使用pytest编写和评估有效的Python测试。适用于编写测试、审查测试代码、调试测试失败或提高测试覆盖率。

下载
  • chardet.detect() 基于统计分析,对短文本或无BOM的UTF-8/UTF-16文件可能误判。若检测结果置信度低于 0.7,建议手动验证(例如用VS Code或Notepad++查看文件编码,或尝试常见编码如 "gbk"、"latin-1");
  • 若确定文件含中文且来自Windows环境,可优先试 encoding="gbk" 或 "gb18030";
  • 使用 encoding="latin-1" 可强制读取任意字节(不会报错),但可能导致中文乱码,仅作临时调试用;
  • 永远避免使用 errors="ignore" 或 errors="replace" 直接忽略解码错误——这会破坏数据完整性,尤其影响后续数据库写入。

? 进阶提示:为提升健壮性,可封装成可重试函数:

def load_json_safely(filepath):
    import chardet
    import json
    with open(filepath, "rb") as f:
        raw = f.read()
    enc = chardet.detect(raw)["encoding"] or "utf-8"
    try:
        with open(filepath, "r", encoding=enc) as f:
            return json.load(f)
    except UnicodeDecodeError:
        # 备选:尝试常见编码
        for alt_enc in ["gbk", "gb18030", "latin-1"]:
            try:
                with open(filepath, "r", encoding=alt_enc) as f:
                    return json.load(f)
            except UnicodeDecodeError:
                continue
        raise ValueError(f"Unable to decode {filepath} with any known encoding.")

# 使用
data = load_json_safely("test11.json")

至此,你已获得结构完整的Python字典,可直接用于创建数据库表字段、批量插入记录等后续操作——无需额外转换,真正实现“所见即所得”的JSON数据落地。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

python js json

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1691

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4264

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1689

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

24777

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3027

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3047

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1163

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

596

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2363

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程