如何使用带有BOM的UTF8编码的C#中的GetBytes()?

 

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

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

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

return File(x, ..., ...);

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

我还尝试创建UTF8Encoding类实例,并将布尔值(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");
}

原因是采用布尔型参数的UTF8Encoding构造函数无法达到您的期望:

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

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

https://stackoverflow.com/questions/4414088/how-to-getbytes-in-c-sharp-with-utf8-encoding-with-bom

关注公众号:UP技术控   获取更多资讯

原文地址:https://www.cnblogs.com/lyl6796910/p/13959540.html