我制作了一个下载功能,将消息下载到 CSV 文件(代码如下)。
现在,当我在记事本或记事本++中打开它时,我看到:
é NY ø ╬ ║► ░ ê ö
(顺便说一句,这就是数据库中的内容)
现在,当我在 Ms-Excel 中打开它时,它显示:
� 纽约 � � � � � � –� � � �
当我在记事本++中打开它时,它说它是用“UTF8 without BOM”编码的。
当我将它(在记事本++中)编码为UTF-8时,一切顺利(也就是说,Excel也显示了正确的字符)
但是我如何确保从代码创建的文件是 UTF-8?
这是我的代码:
public ActionResult DownloadPersonalMessages()
{
StringBuilder myCsv = new StringBuilder();
myCsv.Append(new DownloadService().GetPersonalMessages());
this.Response.ContentType = "text/csv";
Response.AddHeader("content-disposition", "attachment; filename=PersonalMessages.csv");
Response.ContentEncoding = Encoding.UTF8;
Response.Write(myCsv.ToString());
Response.Flush();
Response.HeaderEncoding = Encoding.UTF8;
return Content("");
}
Edit:
我的函数现在返回一个ByteArray
通过这个转换
UTF8Encoding encoding = new UTF8Encoding();
return encoding.GetBytes(str);
我的下载现在是这样的:
Response.AddHeader("Content-Disposition", "attachment; filename=PersonalMessages.csv");
return File(new DownloadService().GetPersonalMessages(), "text/csv");
泽雷的回答对OP有帮助,但实际上并没有回答问题。这是正确的解决方案,来自这另一篇文章 https://stackoverflow.com/a/4414118/120955:
public ActionResult Download()
{
var data = Encoding.UTF8.GetBytes("some data");
var result = Encoding.UTF8.GetPreamble().Concat(data).ToArray();
return File(result, "application/csv", "foo.csv");
}
字节顺序标记(虽然技术上 UTF8 并不需要)会提示某些程序(例如 Excel >2007)您正在使用 UTF8。您必须通过手动包含它GetPreamble()
method.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)