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

Python用Pandas导出含阿拉伯字符的CSV乱码,如何正确配置UTF-8编码

含阿拉伯字符CSV导出乱码问题定位与修复方案

常见代码错误定位

  • 导出方法未显式指定编码参数:pandas在Windows环境下调用df.to_csv()时,默认使用系统本地编码(多为GBK/ANSI)写入文件,这类编码无法完整承载阿拉伯字符的字节,会直接生成乱码文件
  • 读取源文件阶段编码不匹配:如果源CSV是UTF-8编码,读取时未指定对应编码,pandas会用默认编码错误解码阿拉伯字符,内存中的数据从读取环节就已经损坏,后续导出操作无论怎么设置都无法得到正确内容
  • 指定UTF-8编码时遗漏BOM标记:纯无BOM的UTF-8文件,在Windows系统下用Excel打开时会因为缺少编码识别标记,错误按ANSI编码解析内容,哪怕文件字节本身正确,打开后依然显示乱码,对阿拉伯这类非ASCII字符的影响尤为明显

正确的编解码配置实现

读写环节统一按规则设置编码,即可彻底解决乱码问题:

  • 读取阶段配置
    • 读取CSV文件时,使用encoding='utf-8-sig'参数,可自动兼容带/不带BOM的UTF-8源文件,不会把文件开头的BOM字符读入数据列:pd.read_csv(源文件路径, encoding='utf-8-sig')
    • 读取Excel文件时无需额外设置编码参数,pandas会自动解析xlsx/xls格式的内部编码规则,只要源文件无损坏就不会出现解码错误
  • 导出阶段配置
    编写download_file的导出逻辑时,替换原有to_csv的默认配置:
    def download_file(df, output_path):
        # 保留原有文件复制、数据类型转换的业务逻辑
        df.to_csv(
            output_path,
            index=False,
            encoding='utf-8-sig',
            line_terminator='\n'
        )
    
    配置说明:
    • encoding='utf-8-sig'会在写入文件时自动添加UTF-8 BOM头,Windows、macOS本地Excel可直接识别编码,阿拉伯、中文等非拉丁字符不会出现显示异常
    • 如果导出的文件要对接Linux端的下游程序处理,可将encoding换回'utf-8',避免BOM头给下游解析带来兼容问题

快速排查校验步骤

  • 逐行检查原有download_file函数的to_csv调用,确认是否遗漏了encoding参数,未显式设置参数的情况下,Windows环境下生成的CSV必然无法正常存储阿拉伯字符
  • 检查源文件读取环节的代码,确认读取UTF-8编码CSV时是否指定了对应编码,避免从读取阶段就把源数据解码成乱码
  • 修复后可通过Notepad++打开生成的CSV,确认右下角显示的编码为UTF-8-BOM,且阿拉伯字符可正常显示,再验证Excel打开的效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 21:54:04