C#实现HttpUtility.UrlEncode输出大写字母

在C#中,将字符串app=97b0c5c6-3986-404b-94ad-e5394316c3e1&info={"OrderNo":"SN180728932848","Amount":10.0}&notify_url=http://pay2.ybdemo.com/Notify/TokenPay_Notify&payment_amount=10.000000000000000&payment_type=1
用HttpUtility.UrlEncode()编码结果为app=97b0c5c6-3986-404b-94ad-e5394316c3e1&info=%7b%22OrderNo%22%3a%22SN180728932858%22%2c%22Amount%22%3a10.0%7d&notify_url=http%3a%2f%2fpay2.ybdemo.com%2fNotify%2fTokenPay_Notify&payment_amount=10.000000000000000&payment_type=1, 但是接收方需要的是app=97b0c5c6-3986-404b-94ad-e5394316c3e1&info=%7B%22OrderNo%22:%22SN180728932848%22%2C%22Amount%22:10.0%7D&notify_url=http:%2F%2Fpay2.ybdemo.com%2FNotify%2FTokenPay_Notify&payment_amount=10.000000000000000&payment_type=1
一开始看到这需求,我的注意力就转移到怎么将%7b转为%7B,正则等方法马上浮现出来,最后发现,一开始思路就错了,舍本逐末,用HttpUtility.UrlEncode就可以搞定:

public string UrlEncode(string str)
{
    StringBuilder builder = new StringBuilder();
    foreach (char c in str)
    {
        if (HttpUtility.UrlEncode(c.ToString()).Length > 1)
        {
            builder.Append(HttpUtility.UrlEncode(c.ToString()).ToUpper());
        }
        else
        {
            builder.Append(c);
        }
    }
    return builder.ToString();
}

在python中 好像:不会被编码为%3A,所以还得还原 return builder.ToString().Replace("%3A",":");

猜你喜欢

转载自blog.csdn.net/dz45693/article/details/81283209