Как убрать RF C 3986 строку - PullRequest
       17

Как убрать RF C 3986 строку

0 голосов
/ 09 января 2020

У меня есть RF C 3986 закодированная строка в виде %x##. Например, символ пробела кодируется как %x20 вместо %20. Как я могу декодировать это в C#? Используя метод декодирования классов Uri, HttpUtility или WebUtility, строка не была декодирована .

Ответы [ 2 ]

1 голос
/ 09 января 2020

Вы можете попробовать регулярные выражения , чтобы Replace все %x##, а также %## совпадения:

  using System.Text.RegularExpressions;

  ...

  string demo = "abc%x20def%20pqr";

  string result = Regex.Replace(
      demo, 
    "%x?([0-9A-F]{2})", 
      m => ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString(), 
      RegexOptions.IgnoreCase);

  Console.Write(result);

Результат:

  abc def pqr
0 голосов
/ 09 января 2020

Вы можете попробовать что-то вроде этого: Вы можете попробовать:

Ссылка: Как заставить Uri.EscapeDataString соответствовать RF C 3986

    var escapedString = new StringBuilder(Uri.EscapeDataString(value));

    for (int i = 0; i < UriRfc3986CharsToEscape.Length; i++) {
        escapedString.Replace(UriRfc3986CharsToEscape[i], Uri.HexEscape(UriRfc3986CharsToEscape[i][0]));
    }

    // Return the fully-RFC3986-escaped string.
    return escaped.ToString();
...