Различия между методами System.Net.WebUtility.UrlEncode и System.Web.HttpUtility.UrlEncode - PullRequest
0 голосов
/ 25 июня 2019

Согласно документации System.Net.WebUtility.UrlEncode (String) коды символов метода должны быть закодированы строчными буквами, по крайней мере, в приведенном примере Итак: « Например, когда встраивается в блок текста для передачи в URL, символы <и> кодируются как% 3c и% 3e. » Но я получаю их все в верхнем регистре. Например этот код:

string url = "https://host<test>";
Console.WriteLine("system.net: {0}", System.Net.WebUtility.UrlEncode(url);

Дает мне следующее:

system.net: https% 3A% 2F% 2Fhost% 3Ctest% 3E

С другой стороны System.Web.HttpUtility.UrlEncode дает мне все в нижнем регистре:

string url = "https://host<test>";
Console.WriteLine("system.web: {0}", System.Web.HttpUtility.UrlEncode(url);

Выход:

system.web: https% 3a% 2f% 2fhost% 3ctest% 3e

Ожидается ли это?

1 Ответ

1 голос
/ 25 июня 2019

Ожидается ли?

Похоже, что ожидается.Проходя через исходный код WebUtility я вижу, что public UrlEncode вызывает один из приватных

    public static string UrlEncode(string value)
    {
      // code stripped
        return Encoding.UTF8.GetString(UrlEncode(bytes, 0, bytes.Length, false /* alwaysCreateNewReturnValue */));
    }

    //private one makes a call to IntToHex
    private static byte[] UrlEncode(byte[] bytes, int offset, int count)
    {
      expandedBytes[pos++] = (byte)IntToHex((b >> 4) & 0xf);

    // IntToHex casting to uppercase character, reason being every 
    // encoded character is returning as uppercase.
    private static char IntToHex(int n)
    {
       //code stripped
        else
            return (char)(n - 10 + (int)'A');  //here
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...