使用Pandas读取从Outlook自动下载的CSV文件时遭遇UTF-8编码解码错误的技术求助
解决Pandas读取CSV时的UTF-8解码错误
这个UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0错误其实很好定位——你下载的CSV文件根本不是UTF-8编码!开头的0xff字节是UTF-16编码的BOM(字节顺序标记)的一部分,这种编码在Windows系统下非常常见,比如Excel导出的CSV经常会用它。下面给你几个可行的解决办法:
1. 直接指定正确编码读取(最快方案)
既然已经定位到大概率是UTF-16编码,直接在pd.read_csv里指定编码即可:
df = pd.read_csv(fp, encoding='utf-16')
如果还是报错,可以试试更具体的utf-16-le(明确指定小端序),少数情况下也可能是带BOM的UTF-8,可以试utf-8-sig。
2. 自动检测文件编码(更稳妥)
要是不确定编码,或者以后可能碰到其他编码的文件,用chardet库自动检测是最省心的:
先安装库:
pip install chardet
然后修改读取代码:
import chardet # 先检测文件编码 with open(fp, 'rb') as f: raw_data = f.read() detection_result = chardet.detect(raw_data) print(f"检测到的编码: {detection_result['encoding']}, 置信度: {detection_result['confidence']}") # 用检测到的编码读取文件 df = pd.read_csv(fp, encoding=detection_result['encoding']) df.head()
这个方法能准确识别绝大多数常见编码,完全不用靠猜。
3. 优化路径拼接(小建议)
你的代码里fp = outputDir + "\\" + fn存在路径分隔符的兼容性问题(跨系统运行时会出错),建议换成和保存附件时一致的os.path.join写法:
fp = os.path.join(outputDir, fn)
补充一句:这个问题和Outlook保存附件的操作无关,是原始附件本身的编码就不是UTF-8,所以只要在读取时适配编码就能解决啦!
内容的提问来源于stack exchange,提问作者ask1504
相关产品推荐
相关产品推荐

