【问题标题】:Mono expects BOM when wtiting output in HttpListener - Mono bug?Mono 在 HttpListener 中输入输出时需要 BOM - Mono 错误?
【发布时间】: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


    【解决方案1】:

    如果您认为自己在 Mono 中发现了错误,请编写一个在 .NET 中通过但在 Mono 中失败的单元测试,然后在 http://bugzilla.xamarin.com/ 中打开错误报告,然后如果您设法修复了该错误,向http://github.com/mono/mono 提出拉取请求,引用您创建的错误编号并将您的单元测试添加到测试套件中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-03
      • 1970-01-01
      • 2014-09-30
      • 2017-03-16
      • 1970-01-01
      • 1970-01-01
      • 2011-02-24
      • 1970-01-01
      相关资源
      最近更新 更多