Mono ожидает спецификацию при вводе выходных данных в HttpListener — ошибка Mono?

#.net #mono #byte-order-mark #httplistener

#.net #mono #метка порядка байтов #httplistener

Вопрос:

Я пытаюсь запустить сервер на основе HttpListener на Mono. Я изучил источники Mono, и похоже, что Mono ожидает метку порядка байтов (спецификацию) перед записью выходных данных в случае UTF-8 и Unicode. Вот фрагмент кода, который я вижу в реализации метода SendHeaders в Mono:

    StreamWriter writer = new StreamWriter (ms, encoding, 256);
   writer.Write ("HTTP/{0} {1} {2}rn", 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 не требуют записи спецификации перед заголовками. Вот что говорится в статье с меткой порядка байтов:

«Стандарт Unicode разрешает спецификацию в UTF-8,2, но не требует и не рекомендует ее использование»

Или я ошибаюсь? Есть ли какой-либо способ записать UTF-8 с помощью HttpListener в Mono?

Ответ №1:

Если вы считаете, что обнаружили ошибку в Mono, напишите модульный тест, который проходит в .NET и завершается неудачей в Mono, затем откройте отчет об ошибке в http://bugzilla.xamarin.com / , а затем, если вам удастся исправить ошибку, предложите запрос на извлечение http://github.com/mono/mono ссылка на номер ошибки, который вы создали, и добавлениеваш модульный тест для набора тестов.