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

C#生成CSV时特殊字符显示异常的解决方法咨询

解决CSV生成时特殊字符乱码问题

问题原因

你遇到的乱码由两个核心问题导致:

  1. 多余的URL编码解码操作:Uri.EscapeDataString和System.Web.HttpUtility.UrlDecode是用于处理URL参数的工具,完全不适合处理CSV文本,反而会破坏UTF-8字符的原生编码结构。
  2. UTF-8无BOM引发的阅读器识别错误:多数CSV阅读器(尤其是Excel)默认会把不带BOM的UTF-8文件当成系统默认编码(中文系统常用GB2312,英文系统常用Windows-1252)解析,这就导致不同机器出现不同的乱码。

修复步骤

1. 移除不必要的URL编码解码逻辑

直接使用原始字符串即可,不需要对CSV内容做URL相关的编码解码:

// 替换原有的UrlDecode+EscapeDataString组合,直接使用原始值
string csvContent = propValue.ToString();

2. 生成带UTF-8 BOM的CSV字节数组

将CSV内容转换为字节数组时,使用带BOM的UTF-8编码,确保阅读器能正确识别文件编码:

// 实例化带BOM的UTF-8编码对象
var utf8WithBom = new UTF8Encoding(true);
byte[] bResult = utf8WithBom.GetBytes(csvContent);

3. 修正返回的Content-Type

把application/octet-stream改为text/csv; charset=utf-8,明确告诉浏览器和阅读器这是UTF-8编码的CSV文件:

return File(bResult, "text/csv; charset=utf-8", "your-filename.csv");

完整示例代码

// 构建CSV内容(示例)
StringBuilder csvBuilder = new StringBuilder();
csvBuilder.AppendLine("Column1,Column2");
csvBuilder.AppendLine($"Sample Text,Code to LSI – END – 11500");

// 转换为带BOM的UTF-8字节数组
var utf8WithBom = new UTF8Encoding(true);
byte[] csvBytes = utf8WithBom.GetBytes(csvBuilder.ToString());

// 返回CSV文件
return File(csvBytes, "text/csv; charset=utf-8", "output.csv");

补充说明

不同机器乱码不同的根本原因:Windows系统的默认ANSI编码随区域设置变化,中文系统用GB2312,英文系统用Windows-1252,解析无BOM的UTF-8时,不同编码会把相同字节解析成不同的乱码字符,添加UTF-8 BOM就能统一解决这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 21:22:52