当遇到此问题时,脑海里闪过的第一个解决方案是设置 web.config 的编码。但一想,就某一个页面的需求而导致其他跟着妥协,不是好的解决方案。于是网上搜索答案,下面做个小分享,遗憾的是研究不够深入,只解决了query string 的问题,而 form data 问题用了修改 web.config 解决。
 
使用 request.QeryString.Get("") 获得的 value,已经不是 url 原生(raw)的值了,而是经过转码 UrlDecode 的值。

使用的编码方式:
1、来自 web.config
 <system.web>
<globalization requestEncoding="gb2312" responseEncoding="gb2312" fileEncoding="utf-8" responseHeaderEncoding="utf-8" />
</system.web>
2、如果没有配置,则使用 utf-8,一般情况是没问题的。但是如果 query string 是 gb2312 编码则会出现问题,永远获取的是乱码。
 
针对 GET query string 解决办法:
先获得原生的 Query,然后用 gb2312 解码
 var queryStrings = Request.Url == null
? Request.QueryString
: HttpUtility.ParseQueryString(Request.Url.Query, Encoding.GetEncoding("GB2312")); var value = queryStrings[key]; private string Decode(string value)
{
var utf8 = Encoding.UTF8;
var decode = HttpUtility.UrlDecode(value.ToUpper(), utf8);
var encode = (HttpUtility.UrlEncode(decode, utf8) ?? string.Empty).ToUpper();
var encoding = (value == encode) ? Encoding.UTF8 : Encoding.GetEncoding("GB2312"); return HttpUtility.UrlDecode(value, encoding);
}
 
针对 POST form 的解决办法:
(x-www-form-urlencoded 方式,已知数据值有 gb2312 编码(如,%D4%C1UTEST13 = 粤UTEST13))
也许情况和 query string 一样,request.form 获得的时候是已经编码过了
 
目前只想到一种解决方法,修改该 web.config:
1、来自 web.config
 <system.web>
<globalization requestEncoding="gb2312" responseEncoding="gb2312" />
</system.web>
 
 

asp.net query string 及 form data 遇到的编码问题的更多相关文章

  1. query string parameters 、 Form Data 、 Request Payload

    微信小程序ajax向后台传递参数的时候总是报400错误 然后看了一下network 发现是query string parameters,但是我写的header如下 header:{ "Co ...

  2. springMVC接收参数的区别form data与query string parameters与request payload

    在AJAX请求中,我见过有三种form表单数据类型提交. 第一种:form data, 第二种:query string parameters,第三种:request payload. 在google ...

  3. http 请求参数之Query String Parameters、Form Data、Request Payload

    Query String Parameters 当发起一次GET请求时,参数会以url string的形式进行传递.即?后的字符串则为其请求参数,并以&作为分隔符. 如下http请求报文头: ...

  4. HTTP请求中的form data,request payload,query string parameters以及在node服务器中如何接收这些参数

    http://www.cnblogs.com/hsp-blog/p/5919877.html 今天,在工作(倒腾微信小程序)的时候,发现发送post请求到node后台服务器接收不到前端传来的参数.其实 ...

  5. <原>ASP.NET 学习笔记之HTML helper中参数何时会是路由参数,何时又会是query string?

    HTML helper中参数何时会是路由参数,何时又会是query string?   @Html.ActionLink("Edit", "Edit", new ...

  6. form data和request payload的区别

    HTML <form> 标签的 enctype 属性 在下面的例子中,表单数据会在未编码的情况下进行发送: <form action="form_action.asp&qu ...

  7. HTTP请求中的form data和request payload的区别

    HTML <form> 标签的 enctype 属性 在下面的例子中,表单数据会在未编码的情况下进行发送: <form action="form_action.asp&qu ...

  8. 【转】form data和request payload的区别

    HTML <form> 标签的 enctype 属性 在下面的例子中,表单数据会在未编码的情况下进行发送: <form action="form_action.asp&qu ...

  9. AJAX POST请求中参数以form data和request payload形式在servlet中的获取方式

    转载:http://blog.csdn.net/mhmyqn/article/details/25561535 HTTP请求中,如果是get请求,那么表单参数以name=value&name1 ...

随机推荐

  1. mysql数据库解决中文乱码的问题

    http://jingyan.baidu.com/article/647f0115937be97f2148a894.html 一个一劳永逸的方法, 修改mysql的配置文件my.ini 在这个配置文件 ...

  2. php拓展

    https://github.com/phalcon/zephirhttp://blog.csdn.net/black_OX/article/details/43700707

  3. 正则表达式pattern属性

    你发现自己多久匆匆编写一些正则表达式验证一个特定的文本. 多亏了新的pattern属性,我们可以在标签处直接插入一个正则表达式. <form action="" method ...

  4. Jenkins+sonar7.3集成

    Jenkins安装请参考:https://blog.csdn.net/CheNorton/article/details/50327825?utm_source=copy Jenkins更新请参考:h ...

  5. pta l2-6(树的遍历)

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805069361299456 题意:给出一个二叉树的结点数目n, ...

  6. 第四章 栈与队列(d)队列接口与实现

  7. Centos 7 下 LAMP 部署

    一.介绍 LAMP is a combination of operating system and open-source software stack. The acronym of LAMP i ...

  8. Gym - 100989G 二分

    链接:ECJTU 2018 Summer Training 1 - Virtual Judge  https://vjudge.net/contest/236677#problem/G 谷歌翻译: 距 ...

  9. Codeforces Round #518 (Div. 2) [Thanks, Mail.Ru!]

    Codeforces Round #518 (Div. 2) [Thanks, Mail.Ru!] https://codeforces.com/contest/1068 A #include< ...

  10. MB_DOCUMENT_BADI调试(Update Debug)

    Update Module函数,主要用语对话或报表中实现同步和异步更新数据库操作,需要单独调用函数实现更新数据库表,但又要求对程序的运行不产生影响(更新成功与否不影响主程序的正常执行) 几个操作,要么 ...