当遇到此问题时,脑海里闪过的第一个解决方案是设置 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. 简单web测试流程(转载)

    转载自 http://blog.csdn.net/qq_35885203 1.界面操作模式打开jmeter 进入jmeter安装目录的bin目录下,双击“jmeter.bat”文件即可打开jmeter ...

  2. 【Django】django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module. Did you install mysqlclient?

    今天创建APP的时候报这个错误django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module. Did you in ...

  3. cf-Round551-Div2-D. Serval and Rooted Tree(DP)

    题目链接:https://codeforces.com/contest/1153/problem/D 题意:有一棵树,给定结点数n,在每个结点上的操作(max:表示该结点的number为其孩子结点中的 ...

  4. 我和struts2 的第一天

    文字解析 1.获取正文请求 2.根据请求做出判断 3.执行具体的方法代码 4.跳转页面,展示给用户 Strut 是Apache发行的MVC框架 他只是表现层的框架 Strut1 是2005年流行的框架 ...

  5. java bean validation 参数验证

    一.前言 二.几种解决方案 三.使用bean validation 自带的注解验证 四.自定义bean validation 注解验证 一.前言 在后台开发过程中,对参数的校验成为开发环境不可缺少的一 ...

  6. 用脚手架创建vue项目

    .创建文件地址 首先创建一个文件夹,我用的HBuilder编辑器 , 然后把文件夹拖入编辑器 , 在你创建的文件夹里面打开cmd 2.输入安装命令 : 1). npm install --global ...

  7. Activity 的启动过程深入学习

    手机应用也是一个app,每一个应用的icon都罗列在Launcher上,点击icon触发onItemClick事件. 我们要启动「淘宝」这个App,首先我们要在清单文件定义默认启动的Activity信 ...

  8. Swift 错误记录

    最近几天开始学习Swift,作为一个从 OC 转到 Swift 的程序员,我一直以为很简单.但是现在学习一个星期之后,发现问题还是蛮多的! 最大的问题就是 太特么 不习惯了!!!!!!!!!! 好吧, ...

  9. 非线性优化(高翔slam---第六讲 )

    1.线性最小二乘问题 2.非线性最小二乘问题 因为它非线性,所以df/dx有时候不好求,那么可以采用迭代法(有极值的话,那么它收敛,一步步逼近): 这样求导问题就变成了递归逼近问题,那么增量△xk如何 ...

  10. js实现各种复制到剪贴板的方法

    一.实现点击按钮,复制文本框中的的内容 <script type="text/javascript"> function copyUrl2() { var Url2=d ...