You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Amazon S3存储桶下载CSV文件时出现解码错误如何解决

解决方案

问题原因

0x94是Windows-1252(cp1252)编码下的右双引号字符,不属于标准UTF-8编码范围。file命令的编码识别仅做参考,存在准确率不足的问题,latin-1编码虽然可以无报错读取该字节,但会映射为不可见控制字符,因此显示为乱码。

可直接使用的修复方案

  • 方案1:优先尝试Windows-1252编码解码
    大部分出现该错误的CSV都是Windows平台Excel导出的文件,直接替换解码规则即可:
    s3 = boto3.client('s3')
    obj = s3.get_object(Bucket='BUCKET_NAME', Key='FILE_NAME')
    # 替换utf-8为cp1252即可
    data = obj['Body'].read().decode('cp1252').splitlines()
    
  • 方案2:自动检测文件编码
    如果不确定编码,使用chardet库自动识别:
    先安装依赖:pip install chardet
    对应代码:
    import chardet
    import boto3
    
    s3 = boto3.client('s3')
    obj = s3.get_object(Bucket='BUCKET_NAME', Key='FILE_NAME')
    raw_content = obj['Body'].read()
    # 检测编码
    detect_result = chardet.detect(raw_content)
    encoding = detect_result['encoding']
    # 用检测到的编码解码
    data = raw_content.decode(encoding).splitlines()
    
  • 方案3:用pandas直接读取S3 CSV
    pandas内置了编码兼容处理,也可以直接读取:
    先安装依赖:pip install pandas s3fs
    对应代码:
    import pandas as pd
    
    df = pd.read_csv('s3://BUCKET_NAME/FILE_NAME', encoding='cp1252')
    # 也可以指定encoding参数为auto自动检测
    
  • 方案4:临时忽略错误排查问题
    如果上述方案都不生效,可以先忽略解码错误,定位异常字符的位置排查:
    data = obj['Body'].read().decode('utf-8', errors='ignore').splitlines()
    

额外排查点

  • 检查S3对象的元数据,确认上传时是否错误设置了Content-Encoding头为错误值
  • 确认文件上传过程中是否被中途修改过编码

内容的提问来源于stack exchange,提问作者Nava Braulio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:36:05