当遇到此问题时,脑海里闪过的第一个解决方案是设置 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. Log4j2配置及使用

    Log4j2:一个日志管理工具.Log4j的升级版,需要Java6以上   一.安装log4j2依赖包 1.通过maven的pom.xml直接引入jar: log4j-api和log4j-core & ...

  2. oracle中case...when的用法

    全表的内容 case...when可以解决在显示的时候想显示别的名称的例子, 用的最多的地方就是性别, 比如上面的表中的性别是由'1'和'0'表示的, 但是实际显示出来在页面上给客户看是不可取的, 这 ...

  3. 第二章 向量(f)归并排序

  4. 使用ffmpeg从mp4文件中提取视频流到h264文件中

    ffmpeg -i 2018.mp4 -codec copy -bsf: h264_mp4toannexb -f h264 tmp. 注释: -i 2018.mp4:  是输入的MP4文件 -code ...

  5. 51nod 1459 迷宫游戏 dijkstra模板

    链接:迷宫游戏 问题 - 51Nod  http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1459 1459 迷宫游戏  基准 ...

  6. Django、Flask、Tornado的比较

    一:常用请求参数的接收 Django中: request.GET/POST Tornado中: self.get_query_argument()/get_query_arguments() self ...

  7. H5入门

    1.基本骨架 <!DOCTYPE html> <html> <head><title>标题</title><meta charset= ...

  8. unity的inputField文本框赋值问题

    GameObject t = GameObject.Find("InputFieldT"); Text tt = t.transform.Find("Text" ...

  9. [LeetCode_94] Binary Tree Inorder Traversal

    题目链接 https://leetcode.com/problems/binary-tree-inorder-traversal/ 题意 二叉树的中序遍历 思路 中序遍历:即"左中右&quo ...

  10. Xshell无法使用root远程登录Ubuntu16服务器

    修改/etc/ssh/sshd_config文件,把PermitRootLogin Prohibit-password 添加#注释掉 新添加:PermitRootLogin yes 2. 重启ssh服 ...