CSV 表格导出内容乱码问题排查

问题描述

在后台项目中,数据导出功能经常被使用。但导出的 CSV 文件内容有时会出现乱码问题。

问题排查

已知:

  1. 并非每次导出都会出现乱码,只有特定筛选结果才会。
  2. 已设置 Content-Type, 为 text/csv
  3. 已在 Content-Type 中添加 charset=utf-8

排查过程:

  1. 复现问题:复制下载链接重新下载文件,确认乱码情况。
  2. 检查文件编码:打开文件,确认是否为 UTF-8 编码。
  3. 验证:使用 UTF-8 编码重新打开文件,内容显示正常,确认乱码由编码问题引起。

问题原因

CSV 文件本质上是纯文本,不包含编码信息。

因此,Excel 在打开 CSV 文件时,会根据系统默认编码进行解析。

Excel 对编码有一定的智能检测能力,会尝试判断文件的编码。

  • 对于大文件,字节样本充足,Excel 可以准确识别 UTF-8 编码,避免乱码。
  • 对于小文件,字节样本不足,Excel 无法准确识别,可能使用系统默认编码解析,从而出现乱码。

解决方案

使用 BOM (Byte Order Mark, 字节顺序标记) 可以解决乱码问题。

BOM 是 Unicode 标准的一部分,是一个特殊的字符序列,放置在文件开头,用于标识文件编码格式与字节顺序,帮助程序正确识别文件内容。

BOM 是为了解决不同计算机设备之间的字节顺序问题而设计的。早期,不同的架构使用不同的字节顺序。

  • 大端序 (Big Endian): 高字节存储在低地址。
  • 小端序 (Little Endian): 低字节存储在高地址。
编码 BOM 十六进制 BOM 字符
UTF-8 EF BB BF \uFEFF
UTF-16 LE FE FF \uFEFE
UTF-16 BE FF FE \uFFFE
UTF-32 LE FF FE 00 00 \uFFFE
UTF-32 BE 00 00 FE FF \uFEFF

将 BOM 字符添加到 CSV 内容开头,即可解决乱码问题,例如:

response.send('\uFEFF' + csv)

CSV 表格导出内容乱码问题排查
https://www.inksha.com/archives/csv-biao-ge-dao-chu-nei-rong-luan-ma-wen-ti-pai-cha
作者
inksha
发布于
2026年03月13日
许可协议