Python读取Excel不会中文乱码,因.xlsx/.xls解析不依赖encoding参数,误加会报TypeError;乱码主因是文件格式误判(如.csv当.xlsx读)、源文件编码问题或软件渲染差异。

Python读取Excel文件不会出现“中文乱码”——因为Excel(.xlsx/.xls)本身不依赖encoding参数,盲目设置encoding不仅无效,还会触发TypeError: read_excel() got an unexpected keyword argument 'encoding'。
为什么加encoding参数会报错
这是最常踩的坑:pandas.read_excel()底层用的是openpyxl(.xlsx)或xlrd(旧版.xls),它们直接解析二进制结构,不走文本流,所以根本不接受encoding参数。你看到的“乱码”,实际是数据在Excel里就显示异常,或导出/保存时编码选错(比如用记事本另存为CSV时选了ANSI),又或者读的是.csv但误用了read_excel。
真正该检查的三个地方
中文显示异常,优先排查以下环节:
- 确认文件后缀和真实格式:用
file your_file.xlsx(Linux/macOS)或看属性“文件类型”,避免把.csv文件当成.xlsx用read_excel读 - 如果是
.csv,必须换用pd.read_csv(),并配合encoding(常见值:'utf-8'、'gbk'、'gb2312') - 如果是
.xlsx但内容仍是乱码:大概率是Excel源文件在Windows上用非Unicode编码(如GBK)写入了单元格,而Excel本身没存编码标识——这时需让上游改用UTF-8保存,或手动清理脏数据
engine参数什么时候需要显式指定
engine只在特定场景下才需干预,不是解决乱码的开关:
立即学习“Python免费学习笔记(深入)”;
- 读
.xlsx:默认engine='openpyxl',无需改动;若报ModuleNotFoundError: No module named 'openpyxl',装它:pip install openpyxl - 读
.xls(老格式):必须设engine='xlrd',但注意xlrd >= 2.0.0已**不再支持.xlsx**,且从2.0.1起**完全放弃.xls读取**——此时应降级:pip install xlrd==1.2.0 - 读含公式/宏/图表的复杂Excel:可试
engine='calamine'(需pip install polars或单独装calamine-python),速度快且对中文兼容好,但不支持写入
验证与调试的一行命令
快速定位问题根源:
import pandas as pd
# 先不加任何参数,看报什么错
df = pd.read_excel("data.xlsx")
<h1>如果报错,加engine再试</h1><p>df = pd.read_excel("data.xlsx", engine="openpyxl")</p><h1>如果是CSV,立刻换read_csv + encoding</h1><p>df = pd.read_csv("data.csv", encoding="gbk") # 或 utf-8-sig
真正棘手的情况,往往出在Excel生成环节——比如用pandas.to_excel()保存时没留意openpyxl默认用UTF-8,但下游用WPS打开却按GBK渲染,这种“伪乱码”得靠统一工具链解决,不是读取端能硬扛的。


















