【发布时间】:2014-08-17 13:56:10
【问题描述】:
我正在尝试在 Mono 上运行基于 HttpListener 的服务器。我检查了 Mono 源,看起来 Mono 在写入输出之前需要一个字节顺序标记 (BOM),以防 UTF-8 和 Unicode。这是我在SendHeaders method implementation in Mono 看到的一段代码:
StreamWriter writer = new StreamWriter (ms, encoding, 256);
writer.Write ("HTTP/{0} {1} {2}\r\n", version, status_code, status_description);
string headers_str = headers.ToStringMultiValue ();
writer.Write (headers_str);
writer.Flush ();
int preamble = (encoding.CodePage == 65001) ? 3 : encoding.GetPreamble ().Length;
if (output_stream == null)
output_stream = context.Connection.GetResponseStream ();
/* Assumes that the ms was at position 0 */
ms.Position = preamble;
我认为这是一个错误,因为据我所知,Unicode 和 HTTP 都不需要在标头之前写入 BOM。这是Byte order mark 文章所说的:
"Unicode 标准允许 UTF-8,2 的 BOM,但不要求 或推荐使用”
还是我错了?有没有办法在 Mono 中用 HttpListener 编写 UTF-8?
【问题讨论】:
标签: .net mono byte-order-mark httplistener