c# - 如何确保我创建的文件下载是 UTF-8? (而不是没有 BOM 的 UTF-8)

标签 c# asp.net asp.net-mvc-2 encoding character-encoding

我做了一个下载功能,可以将消息下载到 CSV 文件(代码如下)。 现在,当我在记事本或 Notepad++ 中打开它时,我看到了这个:

é 纽约 ø ╬ ║► ░ ê ö

(顺便说一句,这就是数据库中的内容)

现在,当我在 Ms-Excel 中打开它时,它显示如下:

é NY ø ╬ ║► ░ ê ö

当我在 Notepad++ 中打开它时,它说它是用“没有 BOM 的 UTF8”编码的。 当我将它(在记事本++ 中)编码为 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("");
}

编辑:

我的函数现在通过此转换返回一个 ByteArray

UTF8Encoding encoding = new UTF8Encoding();
return encoding.GetBytes(str);

现在我的下载是这样的:

Response.AddHeader("Content-Disposition", "attachment; filename=PersonalMessages.csv");
return File(new DownloadService().GetPersonalMessages(), "text/csv");

最佳答案

Zareth 的回答对 OP 有所帮助,但实际上并没有回答问题。这是正确的解决方案,来自 this other post :

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() 方法手动包含它。

关于c# - 如何确保我创建的文件下载是 UTF-8? (而不是没有 BOM 的 UTF-8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4283518/

相关文章:

c# - 在 ASP.NET MVC 应用程序中重写 ResourceManager?

asp.net-mvc - 绑定(bind)模型进行查看

c# - 使用 ServiceConfiguration (Azure) 中的连接字符串自定义 DbContext

html - 如何防止 chrome 中的自动完成 "Use password for:"选项?

c# - 如何处理调用了异步方法的对象?

asp.net - MVC 3 部署自动化

html - 将 git 分支名称注入(inject) HTML 页面

asp.net - 在 asp.net mvc 中绑定(bind)缺少元素的数组

java - java 8中的.net列表分组依据?

c# - 将接口(interface)的 ProperyInfo 与类的 PropertyInfo 匹配