c# url自动解码解决方案

摘要:
昨天下午,易宝的维修人员联系了我,询问了我三个订单的状态。他们已经成功地扣除了费用,但我们仍然有待扣除的订单的状态。经过检查,我们发现双方的签名都有问题。仔细看看这三个订单的共性。用户名都包含中文,然后我们可以开正确的药……既然问题的原因已经找到,我们该如何纠正它……我检查了整个请求对象,找到了request。Url在查询中,获得的参数是Url未解码的最原始值,然后是1publicstaticNameValueCollectionGetQueryString2{3queryString=queryString.Replace(“?

昨天下午易宝维护人员联系我,询问我三笔订单的状态,他们是扣费成功了,我们这还是订单待扣费状态,经过检查发现双方的签名有问题,仔细一看这三笔订单都有一个共性,用户名都包含中文,然后就对症下药。。。

由于易宝再扣费成功后通知我方前,对字符串用gb2312 urlencode了,而我方接口是用.net实现的,所以默认的编码格式是utf-8,所以接收到请求后就把字符串的内容用utf-8 urldecode了,导致我这边HttpUtility.UrlDecode(Request["user_name"], Encoding.GetEncoding("GB2312")) 获得到的数据就是乱码了。

现在问题找到原因了,怎么修改呢。。。

我查看了整个request对象,发现Request.Url.Query中,获得的参数是最原始的没有经过url解码前的值然后就这么修改了

 1 public static NameValueCollection GetQueryString(string queryString, Encoding encoding)
 2         {
 3             queryString = queryString.Replace("?", "");
 4             NameValueCollection result = new NameValueCollection(StringComparer.OrdinalIgnoreCase);
 5             if (!string.IsNullOrEmpty(queryString))
 6             {
 7                 int count = queryString.Length;
 8                 for (int i = 0; i < count; i++)
 9                 {
10                     int startIndex = i;
11                     int index = -1;
12                     while (i < count)
13                     {
14                         char item = queryString[i];
15                         if (item == '=')
16                         {
17                             if (index < 0)
18                             {
19                                 index = i;
20                             }
21                         }
22                         else if (item == '&')
23                         {
24                             break;
25                         }
26                         i++;
27                     }
28                     string key = null;
29                     string value = null;
30                     if (index >= 0)
31                     {
32                         key = queryString.Substring(startIndex, index - startIndex);
33                         value = queryString.Substring(index + 1, (i - index) - 1);
34                     }
35                     else
36                     {
37                         key = queryString.Substring(startIndex, i - startIndex);
38                     }
39 
40                     result[key] = HttpUtility.UrlDecode(value, encoding);
41 
42                     if ((i == (count - 1)) && (queryString[i] == '&'))
43                     {
44                         result[key] = string.Empty;
45                     }
46                 }
47             }
48             return result;
49         }
50 
51      NameValueCollection col = GetQueryString(Request.Url.Query, Encoding.GetEncoding("GB2312"));
52         string user_id = col["user_name"];

免责声明:文章转载自《c# url自动解码解决方案》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇1.MyBatis所需要的配置文件Ajax实战下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

url传递参数中有特殊字符时前后台处理

将参数通过encodeURIComponent()函数编译一遍再传值即可。 在项目中用ajax post 传递参数到后台,发现我的参数中有特殊字符会被过滤掉或者转义,但是有时候后台需要这些字符。解决方法记录如下 比如windows创建文件夹不支持特殊字符串:/^.*[\/*:"?<>|].*$/ 传参的时候前台js使用encodeURICom...

URL的编码和解码

URL的编码和解码   参考:阮一峰--关于URL编码 1 为什么要URL编码 在因特网上传送URL,只能采用ASCII字符集      也就是说URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号,即只有字母和数字[0-9a-zA-Z]、一些特殊符号$-_.+!*'()[不包括双引号]、以及某些保留字(空格转换为+),才可以不经过编...

如何解决扩展AscII乱码噩梦

 今天公司站点遇到个问题:因为数据库设置的编码是GB的,所以一些法语字符存进去后立马乱码,更别说显示了,所以我想到了西文字符的显示方式。 如果你安装了DW,可以将首选参数的默认编码设置为希腊文,新建一个HTML页面你可以看到charset=iso-8859-7,OK,将其改为charset=iso-8859-1即可。 在拆分的下面输入框中输入汉字,嘿嘿,看...

GBK、GB2312、iso-8859-1之间的区别

转自:http://blog.csdn.net/jerry_bj/article/details/5714745 GBK、GB2312、iso-8859-1之间的区别   GB2312,由中华人民共和国政府制定的,简体汉字编码规范,大陆所有计算机中的简体中文,都使用此种编码格式。目前,我也不知道还有另外的简体汉字编码规范。与此对应的还有BIG5,是中华民国...

URL编码与解码

 通常如果一样东西需要编码,说明这样东西并不适合传输。原因多种多样,如Size过大,包含隐私数据,对于Url来说,之所以要进行编码,是因为Url中有些字符会引起歧义。   例如,Url参数字符串中使用key=value键值对这样的形式来传参,键值对之间以&符号分隔,如/s?q=abc&ie=utf-8。如果你的value字符串中包含了=或者...

解决java中对URL编码的问题

首先查看javascript中的encodeURI和encodeURLComponent方法的区别. encodeURI:不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( )    也不会对以下在 URI 中具有特殊含义的 ASCII 标点符                       号...