使用FileHelper.dll导出CSV时Excel显示乱码的问题求助
解决Excel打开UTF-8 CSV时特殊字符乱码的问题
这个问题我碰到过好多次,根源其实很简单:Excel 2016对UTF-8编码的CSV文件有个“小脾气”——如果文件开头没有UTF-8 BOM(字节顺序标记),它就会默认用系统的ANSI编码去解析,导致像弯引号这类特殊字符显示成乱码,而记事本/Notepad++会自动检测UTF-8编码,所以能正常显示。
针对你的代码,只需要在输出CSV内容之前,往Response里写入UTF-8的BOM即可修复,具体修改如下:
this.Response.Clear(); this.Response.ClearContent(); this.Response.ClearHeaders(); Response.ContentType = "text/csv"; Response.AddHeader("content-disposition", "attachment; filename=" + "Unicode_CSV_Demo.csv"); DemoCSVcls DemoCSVcls = new DemoCSVcls(); List<DemoCSVcls> CSVTextList = new List<DemoCSVcls>(); DemoCSVcls.Text1 = "‘tipping off’"; DemoCSVcls.Text2 = "ʼ"; CSVTextList.Add(DemoCSVcls); var engine = new FileHelperEngine<DemoCSVcls>(Encoding.UTF8); string finalString = engine.WriteString(CSVTextList); // 关键步骤:写入UTF-8 BOM,让Excel正确识别编码 Response.BinaryWrite(Encoding.UTF8.GetPreamble()); Response.BufferOutput = true; Response.Write(finalString); Response.Flush(); Response.End();
补充说明:
Encoding.UTF8.GetPreamble()会返回UTF-8的BOM字节数组(0xEF, 0xBB, 0xBF),把它写入Response开头,Excel就能准确识别文件是UTF-8编码了。- 你已经正确设置了
FileHelperEngine的编码为UTF-8,也指定了ContentType为text/csv,这部分不需要改动。 - 测试的时候重新导出文件用Excel打开,特殊字符应该就能正常显示了。
内容的提问来源于stack exchange,提问作者Muktabai Chavan
相关产品推荐
相关产品推荐

