Получение HttpWebRequest для использования кодировки ISO-8859-1 для urlencoding - PullRequest
2 голосов
/ 11 ноября 2010

У меня проблема с получением HttpWebRequest для использования кодировки ISO-8859-1 для параметров в веб-запросе, проблема связана как с POST, так и с GET.

В двух словах проблема заключается в том, что любые параметры запроса, которые содержат символы не ascii, такие как Ö и æ, преобразуются в их представления UTF-8%, а не в представления ISO-8859-1.

Ö преобразуется в% c3% 96 вместо% d6.

Моя текущая идея решения состоит в том, чтобы преобразовать строку запроса в байтовый массив ISO-8859-1, а затем преобразовать байтовый массив обратно в UTF-8, char для char, перехватывая любые байты> 127и преобразование их в их значения% hex вместо.

Есть ли лучший способ решения этой проблемы?

Ответы [ 2 ]

2 голосов
/ 11 ноября 2010

Создайте свой собственный алгоритм кодирования URL следующим образом;метод WebRequest будет использовать URI, указанный вами в вашей пользовательской кодировке.

string input = "http://www.example.com/q?Ö=æ";

StringBuilder sb = new StringBuilder();
foreach (byte by in Encoding.GetEncoding("ISO-8859-1").GetBytes(input))
{
    // NOTE: This is very simplistic; a robust solution would probably really need
    // to handle all non-alphanum and non-reserved characters, as specified by
    // http://www.ietf.org/rfc/rfc2396.txt
    if (by <= 0x7F)
        sb.Append((char) by);
    else
        sb.Append(string.Format("%{0:X2}", by));
}

Uri uri = new Uri(sb.ToString());
// uri.AbsoluteUri == "http://www.example.com/q?%D6=%E6"

WebRequest request = WebRequest.Create(uri);
using (request.GetResponse())
{
    // ...
}
0 голосов
/ 13 ноября 2010

Я бы лучше попытался починить «другую сторону трубы» и заставить его принять utf-8.UTF-8 - это путь, если вы хотите быть «будущим»

...