You need to enable JavaScript to run this app. 使用utf-8编码解码pandas导出的CSV文件仍触发UnicodeError如何解决
优惠活动
大模型
产品
解决方案
定价
更多

使用utf-8编码解码pandas导出的CSV文件仍触发UnicodeError如何解决

问题根源

报错信息中提到charmap编码,说明解码环节并未使用你指定的UTF-8规则,问题出在代码写法的逻辑错误:
你在调用open()打开文件时没有指定编码,在Windows系统环境下open()函数默认使用系统区域对应的字符集(属于charmap类编码,比如简体中文系统默认是GBK、英文系统默认是cp1252)解码文件内容,此时已经触发了解码错误。你后续传给pd.read_csv的encoding='utf-8'参数不会生效,因为read_csv接收到的是已经经过open()解码的文件对象,不会再做二次解码处理。

排查步骤
  • 确认导出文件编码:用文本编辑器(如Notepad++)打开导出的myfile.csv,查看右下角标注的编码格式,确认是否为UTF-8(部分场景下可能是带BOM的UTF-8)
  • 验证本地open默认编码:运行以下代码确认系统默认编码:
import locale
print(locale.getpreferredencoding(False))

如果输出结果不是utf-8,即可确认是open默认编码导致的问题。

解决方案

方案1:直接传入文件路径给read_csv(推荐)

pd.read_csv原生支持直接传入文件路径,会自动处理编码逻辑,写法更简洁:

import pandas as pd
csv = pd.read_csv('myfile.csv', encoding='utf-8', index_col=False)

方案2:open时指定编码

如果你需要提前拿到文件对象做其他处理,将编码参数加在open方法中即可:

import pandas as pd
with open('myfile.csv', 'r', encoding='utf-8') as f:
    csv = pd.read_csv(f)

特殊场景适配

如果确认文件是带BOM的UTF-8编码,将编码参数改为utf-8-sig即可正常读取:

csv = pd.read_csv('myfile.csv', encoding='utf-8-sig')

如果不确定文件编码,可以用chardet库检测后再读取:

import chardet
# 二进制模式读取文件内容检测编码
with open('myfile.csv', 'rb') as f:
    encode_info = chardet.detect(f.read())
# 用检测到的编码读取文件
csv = pd.read_csv('myfile.csv', encoding=encode_info['encoding'])

内容的提问来源于stack exchange,提问作者Pedro Kaneto Suzuki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 04:15:04