gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 18:04:15 31 4
gpt4 key购买 nike

我做了一个下载功能,可以将消息下载到 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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com