2014-02-18 4 views
2

Я пытаюсь преобразовать URL-строки в некоторые строки, однако у меня проблемы с методами, предоставляемыми инфраструктурой .Net.URL-кодирование символов ASCII/UTF16

Например, я пытаюсь кодировать строки, содержащие символ «â». Например, согласно w3schools, я ожидал бы, что этот символ будет закодирован как «% E2» (и система PHP, которую я должен назвать, ожидает этого тоже ...).

Я попытался с помощью этих методов:

System.Web.HttpUtility.UrlEncode("â"); 
System.Web.HttpUtility.UrlPathEncode("â"); 
Uri.EscapeUriString("â"); 
Uri.EscapeDataString("â"); 

Однако, все они кодируют этот символ как: % C3% A2

Я предполагаю, что это что-то делать с тем фактом, что строки в .NET кодируются UTF-16. Таким образом, чтобы избежать этой проблемы, я могу написать это, например:

"%" + ((int)character).ToString("X") 

Однако, я хотел бы знать, если структура уже имеет встроенный метод (я не могу найти ответ здесь или в другом месте, чтобы почему мой персонаж закодирован таким образом)?

ответ

4

Причина в том, не, что .NET использует UTF-16 в кодировке строк. Причина заключается в том, что UrlEncode(string) overload использует UTF-8, по умолчанию, и %C3%A2 является правильным UTF-8 кодирование â:

Метод HttpUtility.UrlEncode использует UTF-8 кодировку по умолчанию. Поэтому использование метода UrlEncode дает те же результаты, что и при использовании метода UrlEncode, и указывая UTF8 как второй параметр.

Если вы предпочитаете другую кодировку (например Latin-1 или Codepage 1252, где â соответствует %E2), вы можете использовать другую перегрузку, которая позволяет задать кодировку:

var x = HttpUtility.UrlEncode("â", Encoding.GetEncoding(1252)); 
+0

Благодаря обоим вы. Я не заметил, что были перегрузки ... Я даю вам ответ, поскольку вы первый ответили. – Matthieu

3

Просто пройти правильную кодировку System.Web.HttpUtility.UrlEncode (Windows-1252, Windows-1254, ISO-8859-1, ISO-8859-9 т.д. в зависимости от того подходит)

var s = HttpUtility.UrlEncode("â", Encoding.GetEncoding("Windows-1252")); 
Смежные вопросы