Setting the charset of html response content to 1252

隐身守侯 提交于 2019-12-10 20:37:02

问题


I'm trying to send some data encoded in Windows 1252 (it's a CSV file) in an HTTP response, but somewhere along the way it's getting re-encoded to UTF-8 (no BOM). How can I make sure that the data stays in the correct encoding?

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:


When you call

HttpContext.Current.Response.Write(someString)

the input someString will be in .NET's internal string representation (actually UTF-16). To actually send the output this has to be converted. By default this conversion will be to UTF-8 (because it efficiently supports the whole of Unicode).

The Charset property simply sets the HTTP response headers. But not there is also a ContentEncoding property to actually control how strings are sent.

So you are missing

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

See the description of System.Text.Encoding for a list of supported encodings.



来源:https://stackoverflow.com/questions/23266080/setting-the-charset-of-html-response-content-to-1252

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!