我在 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/