Я создаю простой сервер, который использует HttpListener
для обработки запросов. Параметры строки запроса, которые я посылаю, при необходимости кодируются в URL. Например, чтобы отправить строку кандзи "尺八"
, необходимо указать код "%E5%B0%BA%E5%85%AB"
.
Мой пример URL, тогда "/?q=%E5%B0%BA%E5%85%AB"
.
В моем контексте обратного вызова у меня есть:
HttpListenerContext context = Listener.EndGetContext();
string rawUrl = context.Request.RawUrl;
string query = context.Request.QueryString["q"];
Проверяя результаты, я получаю:
rawUrl = "/?q=%E5%B0%BA%E5%85%AB"
query = "尺八"
Но если я посмотрю на context.Request.Url
, я получу {http://localhost:8080/?q=尺八}
.
Похоже, строка запроса в context.Request.QueryString
декодируется с использованием некоторой кодировки, отличной от UTF-8.
Мой обходной путь - игнорировать context.Request.QueryString
и создать свой собственный, выполнив следующее:
var queryString = HttpUtility.ParseQueryString(context.Request.Url.Query);
Это дает мне правильное значение, но это похоже на взлом.
Есть ли способ сказать HttpListener
(или контексту, или запросу) интерпретировать строку запроса как UTF-8, который я считаю стандартом в любом случае? Или я должен просто жить с этим обходным путем?