如何转义 RFC 3986 字符串
How unescape RFC 3986 string
我有一个 RFC 3986 形式的 %x##
编码字符串。例如 space 字符被编码为 %x20
而不是 %20
。我如何在 C# 中解码它?
使用 Uri
、HttpUtility
或 WebUtility
类 的解码方法,字符串 未解码 .
您可以尝试 正则表达式 以便 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();
我有一个 RFC 3986 形式的 %x##
编码字符串。例如 space 字符被编码为 %x20
而不是 %20
。我如何在 C# 中解码它?
使用 Uri
、HttpUtility
或 WebUtility
类 的解码方法,字符串 未解码 .
您可以尝试 正则表达式 以便 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();