我正在尝试在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();
答案 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
的说明。