具有大写十六进制字符的HttpUtility.UrlEncode

时间:2018-08-13 19:28:58

标签: c# urlencode

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

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

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

2 个答案:

答案 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而不是+来代替空格,并且大写十六进制替换。