如何转义 RFC 3986 字符串

How unescape RFC 3986 string

我有一个 RFC 3986 形式的 %x## 编码字符串。例如 space 字符被编码为 %x20 而不是 %20。我如何在 C# 中解码它? 使用 UriHttpUtilityWebUtility 类 的解码方法,字符串 未解码 .

您可以尝试 正则表达式 以便 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

您可以尝试这样的操作: 你可以试试:

参考:How to get Uri.EscapeDataString to comply with RFC 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();