Jupyter Notebook加载CSV文件时的Unicode解码问题求助
解决UTF-8 CSV文件在Jupyter Notebook加载乱码/解码错误的问题
这种情况我碰到过好几次,大概率是文件编码的实际情况和你预期的不太一致,咱们一步步来解决:
1. 先试试utf-8-sig编码加载
既然你的JSON文件用utf-8-sig能正常加载,那这个CSV很可能也是带BOM的UTF-8编码。Windows下很多工具(比如Excel)导出UTF-8时会自动加上BOM头,而utf-8编码不会处理这个BOM,就会抛出解码错误,utf-8-sig则会自动跳过BOM。直接试这个代码:
import pandas as pd df = pd.read_csv('你的CSV文件名.csv', encoding='utf-8-sig')
2. 检测文件的实际编码
如果上面的方法不行,咱们得搞清楚文件到底是什么编码。你可以用chardet库来检测:
首先安装chardet(如果没装的话):
pip install chardet
然后运行这段代码检测编码:
import chardet # 读取文件前10000字节来检测,避免加载大文件耗时 with open('你的CSV文件名.csv', 'rb') as f: detect_result = chardet.detect(f.read(10000)) print(f"检测到的编码: {detect_result['encoding']}, 置信度: {detect_result['confidence']}")
然后用检测出来的编码去加载CSV,比如如果显示是gbk,就用encoding='gbk'。
3. 参考Spyder的编码设置
既然Spyder能正常显示,你可以看看Spyder里打开这个文件时右下角显示的编码是什么(Spyder会自动识别并显示),直接用这个编码去加载就行。比如Windows系统下有些文件实际是GBK编码,但被误标为UTF-8,Spyder会自动识别系统编码来显示。
4. 临时排查:跳过非法字符(不推荐长期用)
如果上面的方法都不行,可能是文件里混了个别非法的UTF-8字符,你可以临时用errors参数跳过,但这会丢失部分数据,只适合排查问题:
df = pd.read_csv('你的CSV文件名.csv', encoding='utf-8', errors='replace')
或者errors='ignore',但还是建议找到正确编码来彻底解决。
内容的提问来源于stack exchange,提问作者milka1117
相关产品推荐
相关产品推荐

