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

如何将DataFrame保存为CSV文件存入FileField并解决乱码问题

问题原因
  • 未显式指定df.to_csv()的编码规则,pandas会自动继承运行环境的默认编码,不同操作系统的默认编码不一致,就会导致生成的CSV文件出现非预期的乱码字符。
  • 你直接将to_csv()返回的字符串传入ContentFile,ContentFile会自动使用Django配置项DEFAULT_CHARSET(默认值为utf-8)对字符串做转码存储,如果转码规则和CSV本身的编码不匹配,也会触发乱码问题。
  • 如果生成的CSV文件需要在Windows系统用Excel打开,未加BOM头的UTF-8编码文件会被Excel默认用GBK解析,也会表现为乱码。
修复方案

两种写法都可以:

写法1:直接指定编码后传入ContentFile

# 指定encoding为utf-8-sig,自带BOM头兼容多平台打开
new_df = df.to_csv(columns=['A', 'B'], index=False, encoding='utf-8-sig')
doc.csvfile.save(f'{doc.id}.csv', ContentFile(new_df))

写法2:用字节流存储更稳定,避免隐式转码

from io import BytesIO

buffer = BytesIO()
df.to_csv(buffer, columns=['A', 'B'], index=False, encoding='utf-8-sig')
# 移动文件指针到开头
buffer.seek(0)
doc.csvfile.save(f'{doc.id}.csv', buffer)

如果不需要兼容Excel打开,把上面的utf-8-sig换成utf-8即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:36:07