ASP.NET中Request.Form中文乱码的解决方法
一直以来,我误以为只有Request.QueryString在接收含有中文的URL查询字符串时可能会出现乱码问题。在实际操作中,我才发现,Request.Form在接收表单中的中文值时也可能会遇到同样的问题。曾经的我是如此的天真,对此一无所知。
背景是这样的:涉及到两个网站的通信,网站A的页面a通过提交表单的方式,向网站B的页面b传递值。网站A统一使用UTF-8编码,而网站B则使用GB2312编码。关于web.config中的编码设置,网站A中全球化设置请求和响应编码均为UTF-8,而网站B则设置为GB2312。
对于网络上搜索到的解决方案,大部分都是关于修改web.config文件中的requestEncoding、responseEncoding等设置。但对我来说,这些建议虽然常见,却并不能解决实际问题。网络上的复制、粘贴行为,以及未经验证的可行性文章,让我感到十分困扰。我在博客中分享自己的经验时,都会确保已经验证了解决方案的可行性,以免误导他人。
为了解决这一问题,我们需要对这个问题进行简单的梳理。实际上,这个过程就是一个UTF-8编码的页面发送数据到GB2312编码的页面。由于编码不同,出现乱码是很正常的现象。解决这个问题的自然方式就是统一编码。网页的编码分为两部分:一是接收请求数据的编码(requestEncoding),一是发送响应的编码(responseEncoding)。要让a页面的发送响应编码与b页面的接收请求编码一致,就可以解决乱码问题。
实际上,解决方案非常简单,只需要在a页面的Page_Load方法中加入一行代码即可:Response.ContentEncoding = Encoding.GetEncoding("gb2312")。这样,a页面发送响应的编码就会被设置为GB2312,与b页面接收请求的编码一致。
你可能会想,反过来设置b页面接收请求的编码与a页面发送响应的一致,行不行呢?我尝试过,但不行。如果你知道其中的原理,我非常希望能听到你的解释。
编程语言
- ASP.NET中Request.Form中文乱码的解决方法
- 淘宝ip地址查询类分享(利用淘宝ip库)
- PHP类的反射用法实例
- phpinfo的知识点总结
- JS完成画圆圈的小球
- AngularJS使用带属性值的ng-app指令实现自定义模块
- mysql自增id超大问题的排查与解决
- jsp页面iframe高度自适应的js代码
- 使用js画图之饼图
- js图片跟随鼠标移动代码
- ASP版实现cookies注入加速工具
- Vue父组件调用子组件事件方法
- 浅析php中jsonp的跨域实例
- JS中闭包的经典用法小结(2则示例)
- php使用Jpgraph创建柱状图展示年度收支表效果示例
- vue2.0路由切换后页面滚动位置不变BUG的解决方法