2010-12-13 6 views
4

Что бы разница будет между:Стандартная кодировка HttpUtility.UrlEncode и указанная кодировка?

HttpUtility.UrlEncode("some string with é and β and stuff") 
HttpUtility.UrlEncode("some string with é and β and stuff", Encoding.UTF8) 
HttpUtility.UrlEncode("some string with é and β and stuff", Encoding.Default) 

результат существо:

some+string+with+%c3%a9+and+%ce%b2+and+stuff 
some+string+with+%c3%a9+and+%ce%b2+and+stuff 
some+string+with+%e9+and+%df+and+stuff 

При тестировании, я получаю тот же результат для первых двух, так я могу с уверенностью предположить, что UTF8 по умолчанию, если или могут отличаться в разных системах?

У меня есть Seene примеры Юникода управляющих последовательностей, который выглядит так:

% u00e9 (E)

практически уверен, что PayPal посылает, что в их СПИ-запросов. Почему .NET не кодируется так?

+0

Метод HttpUtility.UrlEncode по умолчанию использует кодировку UTF-8. Поэтому использование метода UrlEncode дает те же результаты, что и при использовании метода UrlEncode, и указывая UTF8 как второй параметр. http://msdn.microsoft.com/pt-br/library/4fkewx0t(v=vs.110).aspx – Tony

ответ

6

Исходный код метода HttpUtility.UrlEncode Method (String) от отражателя:

public static string UrlEncode(string str) 
{ 
    if (str == null) 
    { 
     return null; 
    } 
    return UrlEncode(str, Encoding.UTF8); 
} 

На ваш вопрос:

так я могу смело предположить, что UTF8 по умолчанию, если не указано

Да, ты можешь.

+0

Вы также спрашивали: «Или это может различаться в разных системах?» - Mono использует тот же UTF8. Но Microsoft должна ** ** указать в MSDN, какая кодировка предполагается по умолчанию. Каждый может подумать, что по умолчанию используется Encoding.Default –

+0

Хорошо, очень тщательный ответ, спасибо. Да, Encoding.Default действительно подразумевает, что это будет «default». – jishi

3

Да, вы можете с уверенностью предположить, что UTF8 по умолчанию основан на ваших примерах выше. Помня о том, что кодировка по умолчанию с .NET определяется базовой кодовой страницей операционной системы.

Пример «% u00e9», который вы видели из PayPal, на самом деле является non-standard implementation для кодирования символов Юникода. Согласно Википедии, эта реализация была отвергнута W3C.

+0

Хорошо, нестандартная реализация, это было полезно знать! – jishi

+2

На самом деле, это был не paypal, который его отправил. Кажется, что ASP.NET преобразует его в нестандартную реализацию в свою коллекцию Request.Form. необработанные данные: & address_street =% C3% A5lderstigen, Request.Form data = & address_street =% u00e5lderstigen, DOH! – jishi

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