HttpUtility.UrlEncode стандартная кодировка против указанной кодировки? - PullRequest
6 голосов
/ 13 декабря 2010

Какая разница между:

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 является значением по умолчанию, если не указано, или оно может отличаться в разных системах?

У меня есть примеры примеров escape-последовательностей Юникода, которые выглядят так:

% u00e9 (é)

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

Ответы [ 2 ]

7 голосов
/ 13 декабря 2010

Исходный код метода HttpUtility.UrlEncode Method (String) из Reflector:

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

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

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

Да, вы можете.

3 голосов
/ 13 декабря 2010

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

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

...