#.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 ссылка на номер ошибки, который вы создали, и добавлениеваш модульный тест для набора тестов.