【发布时间】:2012-08-31 18:30:04
【问题描述】:
我正在向TextWriter 写信。我希望 UTF-16 字节顺序标记 (BOM) 出现在输出中:
public void ProcessRequest(HttpContext context)
{
context.Response.ContentEncoding = new UnicodeEncoding(true, true);
WriteStuffToTextWriter(context.Response.Output);
}
除了输出不包含字节顺序标记:
HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Thu, 06 Sep 2012 21:09:23 GMT
X-AspNet-Version: 4.0.30319
Content-Disposition: attachment; filename="Transactions_Calendar_20120906.csv"
Cache-Control: private
Content-Type: text/csv; filename="Transactions_Calendar_20120906.csv"; charset=utf-16BE
Content-Length: 95022
Connection: Close
JobName,ShiftName,6////09////2012 12::::00::::00 АΜ,...
我如何告诉TextWriter 编写编码标记?
注意:2nd paramter in UnicodeEncoding:
context.Response.ContentEncoding = new UnicodeEncoding(true, true);
byteOrderMark
键入:System.Boolean
true 以指定提供 Unicode 字节顺序标记;否则,false。
【问题讨论】:
-
WriteStuffToTextWriter到底是什么,您可能必须在StreamWriter中指定编码 -
是什么让您说它不包含您拥有的代码的 BOM?
-
我和@JonHanna 在一起。另外,您是否尝试过创建控制台应用程序并将相同的内容直接写入文件并查看它的外观?毕竟,在您的网络服务器和浏览器之间发生了很多事情。
-
控制台应用程序也应该隐藏 BOM,BOM 的全部意义在于它不会作为文本的一部分出现,而是提供有关谁将其从八位字节解码为文本的数据。上面流的十六进制视图会显示 FE 和 FF 或 FF 和 FE(这些字节的顺序正是字节顺序标记要显示的内容,因为 U+FFFE 不是有效字符,所以只有一个命令可能是正确的)。 Fiddler 有一个十六进制视图。
标签: c# encoding utf-8 utf-16 textwriter