2010-11-11 2 views
2

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

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

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

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

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

+0

Какой метод вы используете для их кодирования в настоящее время? –

+0

В настоящее время ни один из них не дает нам проблем, так как .net по умолчанию не соответствует UTF-8. – Grubsnik

ответ

2

Создайте свой собственный алгоритм кодирования 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()) 
{ 
    // ... 
} 
+1

Это было то решение, которое я надеялся избежать, но тем не менее очень изящную реализацию. – Grubsnik

0

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

+1

У нас нет какой-либо формы контроля над сайтами, к которым мы обращаемся. Таким образом, факт, что веб-сайты могут быть ужасно устаревшими, - это не то, что мы можем решить. – Grubsnik

 Смежные вопросы

  • Нет связанных вопросов^_^