HttpUtility.UrlEncode("abc : 123")
产生abc+%3a+123
,但是我需要它产生abc+%3A+123
(注意大写的A
。
有没有办法让UrlEncode输出大写的十六进制字符?
我不想简单地在整个字符串上调用.ToUpper()
,因为我需要abc
保持小写。
答案 0 :(得分:0)
开箱即用不支持此操作,但是您可以自己执行此操作:
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]
明确提到大写和小写是等效的。
答案 1 :(得分:0)
我相信我已经从第二个答案中找到了这个问题的答案:https://stackoverflow.com/a/1148326/20471
解决方案是使用Uri.EscapeDataString
,因为它使用%20
而不是+
来代替空格,并且大写十六进制替换。