未知Unicode编码读取OneDrive中CSV失败,求有效解决方法
解决方案
直接指定正确编码与分隔符
根据你提到的Notepad++检测结果,文件编码为UTF-16 Little Endian,Pandas支持该编码的参数为utf-16-le(若文件带BOM,也可直接用utf-16,Pandas会自动处理)。结合实际分隔符;,修改代码如下:
import pandas as pd def read_csv(path): try: return pd.read_csv( path, encoding='utf-16-le', # 或尝试'utf-16' sep=';', header=1 # 保留原header设置,根据文件实际结构调整 ) except Exception as e: print(f"读取失败: {e}") raise
问题根源解释
你之前用\t作为分隔符能得到正确行数但只有1列,是因为编码识别错误导致的假象:
- 当chardet误判UTF-16文件的编码时,Pandas用错误编码读取,原本的分号
;会被解析成乱码或无法识别的字节组合,无法作为列分隔符; - 而文件中的换行符在错误编码下仍能被识别,所以行数正确,但所有内容被挤到1列中。
验证编码正确性
如果不确定编码是否匹配,可先读取少量内容验证:
with open(path, 'rb') as f: # 读取前100字节并解码 print(f.read(100).decode('utf-16-le'))
若输出内容正常显示且能看到分号分隔符,说明编码和分隔符设置正确。
内容的提问来源于stack exchange,提问作者Stefan Bongers
相关产品推荐
相关产品推荐

