将html响应内容的charset设置为1252

时间:2014-04-24 10:18:35

标签: c# character-encoding httpresponse windows-1252

我正在尝试在HTTP响应中发送一些在Windows 1252中编码的数据(它是一个CSV文件),但在某个地方,它会被重新编码为UTF-8(无BOM)。如何确保数据保持正确的编码?

var sb = new StringBuilder();
// Build the file from windows-1252 strings in the sb...
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.AddHeader("content-disposition", string.Format("filename=\"{0}\".csv", fileName));
HttpContext.Current.Response.ContentType = "text/csv;charset=windows-1252";
HttpContext.Current.Response.Charset = "windows-1252";
HttpContext.Current.Response.Write(sb.ToString());
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.End();

1 个答案:

答案 0 :(得分:5)

致电时

HttpContext.Current.Response.Write(someString)

输入someString将使用.NET的内部字符串表示形式(实际上是UTF-16)。要实际发送输出,必须进行转换。默认情况下,此转换将为UTF-8(因为它有效地支持整个Unicode)。

Charset属性只是设置HTTP响应头。但是并没有ContentEncoding属性来实际控制字符串的发送方式。

所以你错过了

HttpContext.Current.Response.ContentEncoding = Encoding.GetEncoding("Windows-1252")

有关支持的编码列表,请参阅System.Text.Encoding的说明。