从S3读取CSV文件遇编码错误,使用latin-1是否可行?
CSV解析编码错误问题及解决方案
问题详情
- 从S3存储桶获取CSV文件,采用分块迭代方式处理时遭遇编码错误
- 已尝试
utf-8、unicode escape编码配置,均无法解决,目前试用latin-1编码,需确认该方案是否可行 - 具体报错信息:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x99 in position 43: invalid start byte
- 当前代码片段:
csv_iterator = pd.read_csv(obj['Body'], iterator=True, chunksize=10000, low_memory=False, encoding="latin-1")
方案确认
你的思路完全正确,用latin-1编码是解决这类解码错误的有效方案,原因如下:
0x99字节在UTF-8编码规则里属于无效起始字节,但在latin-1(即ISO-8859-1)编码中,每一个字节都会被直接映射为对应的Unicode字符,不会因为解码失败抛出异常,能保证文件顺利完成分块读取- 这种方案的优势是兼容性极强,不会因为个别异常编码字节中断处理流程;唯一的小问题是如果原文件包含非
latin-1体系的特殊字符,可能会显示为乱码,但至少能先完成解析,后续可针对乱码字符进一步排查原文件的真实编码(比如Windows-1252,0x99在该编码中对应™符号) - 如果后续需要精准还原字符,可以尝试将
encoding设为'cp1252'(Windows-1252),它和latin-1高度兼容,能正确解析更多Windows环境下生成的特殊字符
内容的提问来源于stack exchange,提问作者Will Graham
相关产品推荐
相关产品推荐

