Python中如何解决读取GBK编码的文件报错_在read_csv中设置encoding参数

秋墨小哥_4122

秋墨小哥_4122

2026-05-29

685人浏览

原创

read_csv读取gbk文件报错需指定encoding='gbk',若失败可试'gb2312'或'gb18030';注意bom干扰,可用'utf-8-sig'处理utf-8 bom;避免非法编码名,优先固定编码策略而非依赖chardet。

python中如何解决读取gbk编码的文件报错_在read_csv中设置encoding参数

read_csv读取GBK文件报错:'utf-8' codec can't decode byte

这是最常见现象——pandas.read_csv 默认用 utf-8 解码,而 Windows 环境下很多中文 Excel 导出或记事本保存的 CSV 实际是 gbk(或 gb2312)编码。直接读会抛出 UnicodeDecodeError。

解决方法很简单:显式传入 encoding='gbk'。

  • 绝大多数中文 Windows 生成的 CSV 文件用 encoding='gbk' 就能打开
  • 如果仍报错(比如含生僻字或旧版 GB2312),可试 encoding='gb2312' 或 encoding='gb18030'(兼容性最强)
  • 不要写 encoding='chinese' 或 'zh-CN' —— 这些不是合法编码名,Python 会直接报 LookupError

为什么encoding='gbk'有时还是报错?

因为文件可能混用了编码,或者 BOM 头干扰。GBK 本身不定义 BOM,但有些编辑器(如 VS Code 保存时选“GBK with BOM”)会在开头写入无效字节,导致 read_csv 解析失败。

实操建议:

python-parallelization
python-parallelization

将顺序 Python 代码转换为并行/并发实现,用于在需要并行化 Python 代码、提升性能时使用。

下载
  • 用 open('file.csv', 'rb').read(10) 查看前几个字节,确认有没有 b'\xef\xbb\xbf'(UTF-8 BOM)或其他异常前缀
  • 若怀疑有隐藏 BOM,优先试 encoding='utf-8-sig'(自动剥离 UTF-8 BOM),再 fallback 到 gb18030
  • Windows 记事本另存为时勾选“ANSI”,实际就是本地默认编码(简体中文系统即 GBK),但某些版本会悄悄加不可见控制字符

read_csv中encoding参数和其他参数的配合要点

encoding 必须在底层解码阶段起作用,所以它影响的是文件字节流到字符串的转换过程。一旦解码失败,后续参数(如 sep、header)根本不会执行。

  • 如果文件第一行是中文表头,且你设了 header=0,但解码失败,错误信息里不会体现“找不到列名”,而是直接卡在编码层
  • encoding 和 engine 一般无需联动,但若用 engine='pyarrow',注意它对非 UTF-8 编码支持有限,建议 stick to default 'c' engine
  • 遇到超大 GBK 文件,别用 encoding='gb18030' 做盲目兜底——它比 gbk 解码慢约 20%,且可能把乱码“合法化”,掩盖真实问题

一行命令快速检测文件真实编码

别靠猜。用 chardet 库做轻量探测(注意:它基于统计,小文件可能不准):

import chardet
with open('data.csv', 'rb') as f:
    raw = f.read(10000)  # 只读前 10KB 足够判断
    print(chardet.detect(raw))

输出类似 {'encoding': 'GBK', 'confidence': 0.99}。但注意:

  • chardet 对纯中文短文本容易误判为 utf-8(因 UTF-8 中文是合法多字节序列)
  • 生产环境不建议在每次 read_csv 前都调 chardet——开销大,应固定编码策略
  • 更稳的方式是:约定数据源统一用 gb18030 输出,或转成 UTF-8 + BOM 再交付

实际处理中,编码问题往往不是孤立的——它常和分隔符识别、空行跳过、列类型推断耦合。先确保 encoding 正确,再调其他参数,否则所有调试都是徒劳。

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

相关文章

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

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

下载

相关标签:

python csv

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

相关专题

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

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

2023.07.20

1771

4

python能做什么
python能做什么

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

2023.07.25

4584

7

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

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

2023.07.31

1729

3

python教程
python教程

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

2023.08.03

27057

23

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

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

2023.08.04

3267

5

python eval
python eval

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

2023.08.04

3287

5

scratch和python区别
scratch和python区别

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

2023.08.11

1203

5

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

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

2023.08.10

596

4

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

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

2023.08.11

2543

5

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习