asp.net-mvc - 如何在 C# 中使用带有 BOM 的 UTF8 编码 GetBytes()?

标签 asp.net-mvc encoding utf-8 byte-order-mark

我在 C# 中的 asp.net mvc 2 应用程序中遇到 UTF8 编码问题。我正在尝试让用户从字符串下载一个简单的文本文件。我正在尝试使用以下行获取字节数组:

var x = Encoding.UTF8.GetBytes(csvString);

但是当我使用以下命令将其返回下载时:

返回文件(x, ..., ...);

我得到一个没有 BOM 的文件,因此无法正确显示克罗地亚语字符。这是因为我的bytes数组编码后不包含BOM。我尝试手动插入这些字节,然后它会正确显示,但这不是最好的方法。

我还尝试创建 UTF8Encoding 类实例并将 bool 值 (true) 传递给其构造函数以包含 BOM,但它也不起作用。

谁有解决办法吗?谢谢!

最佳答案

尝试这样:

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");
}

原因是采用 bool 参数的 UTF8Encoding 构造函数没有执行您期望的操作:

byte[] bytes = new UTF8Encoding(true).GetBytes("a");

生成的数组将包含值为 97 的单个字节。没有 BOM,因为 UTF8 不需要 BOM。

关于asp.net-mvc - 如何在 C# 中使用带有 BOM 的 UTF8 编码 GetBytes()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4414088/

相关文章:

git - git ls-files 真的是字符不可知论者吗?如果不是,那是什么?

encoding - 在终端问题中设置区域设置和语言

c# - 在数组 c# 的现有 session 中添加字符串数组

c# - 如何获得 ASP.NET MVC Ajax 响应以重定向到新页面而不是将 View 插入 UpdateTargetId?

c# - 从 MVC 4 中的 View 列表到 Controller 缺少值?

html - 如何在解析文档时告诉 Nokogiri 不要将其转换为不同的编码(在我的例子中不要将 &paund; 转换为其他任何东西)

c# - 如何在 ASP.Net MVC 中将类的值从 View 传递到 Controller

java - 保存实体时 Spring/Hibernate 编码错误

java - RGB 24 位到 RGB 8 位位移

sql-server - 如何将 UTF-8 与 Node Express 和 MSSQL 结合使用?西里尔字母不起作用