C# HttpUtility.UrlEncode使用大写十六进制字符

C# HttpUtility.UrlEncode使用大写十六进制字符,c#,urlencode,C#,Urlencode,HttpUtility.UrlEncode(“abc:123”)产生abc+%3a+123,但我需要它产生abc+%3a+123(注意大写的A) 有没有办法让UrlEncode输出大写十六进制字符 我不想简单地对整个字符串调用.ToUpper(),因为我需要abc保持小写。这不是现成的支持,但您可以自己做: private static string UrlEncodeUpperCase(string stringToEncode) { var reg = new Regex(@"%[a

HttpUtility.UrlEncode(“abc:123”)
产生
abc+%3a+123
,但我需要它产生
abc+%3a+123
(注意大写的
A

有没有办法让UrlEncode输出大写十六进制字符


我不想简单地对整个字符串调用
.ToUpper()
,因为我需要
abc
保持小写。

这不是现成的支持,但您可以自己做:

private static string UrlEncodeUpperCase(string stringToEncode)
{
    var reg = new Regex(@"%[a-f0-9]{2}");
    stringToEncode = HttpUtility.UrlEncode(stringToEncode);
    return reg.Replace(stringToEncode, m => m.Value.ToUpperInvariant());
}

请记住,
[RFC 3986][1]
明确提到大写和小写是等效的。

这不支持开箱即用,但您可以自己做:

private static string UrlEncodeUpperCase(string stringToEncode)
{
    var reg = new Regex(@"%[a-f0-9]{2}");
    stringToEncode = HttpUtility.UrlEncode(stringToEncode);
    return reg.Replace(stringToEncode, m => m.Value.ToUpperInvariant());
}

请记住,
[RFC 3986][1]
明确提到大写和小写是等效的。

我相信我已经从这个问题的第二个答案中找到了答案:


解决方案是使用
Uri.EscapeDataString
,因为它使用
%20
来表示空格,而不是
+
,还使用大写的十六进制替换。

我相信我已经从这个问题的第二个答案中找到了答案:


解决方案是使用
Uri.EscapeDataString
,因为它使用
%20
来表示空格,而不是
+
,还使用大写的十六进制替换,
HttpUtility.UrlEncode
将冒号转换为%3a小写,如果您需要大写字母a,我相信您可能需要使用不同的实用程序进行编码,提供的帖子显示了不同C#类的编码输出。我相信从帖子中提供的表中,您可能需要使用
WebUtility.UrlEncode(string)
这篇文章可能会有帮助(),
HttpUtility.UrlEncode
将冒号转换为%3a小写,如果您需要大写字母a,我相信您可能需要使用不同的实用程序进行编码,提供的帖子显示了不同C#类的编码输出。我相信从帖子中提供的表中,您可能需要使用
WebUtility.UrlEncode(string)
当涉及到身份验证签名时,它们并不等价,不幸的是,当涉及到身份验证签名时,它们并不等价