关于asp.net HttpUtility.UrlDecode解码问题
2012-10-18 15:08
381 查看
最近做一个支付接口,对方回调时用的gb2312编码
asp.net默认request获取参数时是utf-8编码
这样我在取值的时候在page_load 事件或者preint事件里设置Request.ContentEncoding = Encoding.GetEncoding("gb2312")均无效
测试案例:建立一个asp.net web应用程序,拖一个button,一个textbox控件
Page_Load事件代码:
这样每次响应我们都是用的gb2312,按照asp.net默认requset对象初始化时编码为utf-8,我们在文本框输入中文,再点button按钮时,request编码为utf-8,response编码为gb2312,所以造成文本框数据回发的时候变成了乱码(文本框中文部分显示一串问号)
网上千篇一律给出的办法是修改配置文件 <globalization requestEncoding= "gb2312 " />,这个是全局的,不推荐。我们需要的是修改某个页面的请求响应编码,而不影响到其他页面
现给出解决办法一:重写InitializeCulture方法即可,加入Request.ContentEncoding 的设置
解决办法二:获取表单数据字符串,自己解析
下面给出简单的解析方法:
asp.net默认request获取参数时是utf-8编码
这样我在取值的时候在page_load 事件或者preint事件里设置Request.ContentEncoding = Encoding.GetEncoding("gb2312")均无效
测试案例:建立一个asp.net web应用程序,拖一个button,一个textbox控件
Page_Load事件代码:
protected void Page_Load(object sender, EventArgs e) { Response.ContentEncoding = Encoding.GetEncoding("gb2312"); //Request.ContentEncoding = Encoding.GetEncoding("gb2312");//设置是无效的 }
这样每次响应我们都是用的gb2312,按照asp.net默认requset对象初始化时编码为utf-8,我们在文本框输入中文,再点button按钮时,request编码为utf-8,response编码为gb2312,所以造成文本框数据回发的时候变成了乱码(文本框中文部分显示一串问号)
网上千篇一律给出的办法是修改配置文件 <globalization requestEncoding= "gb2312 " />,这个是全局的,不推荐。我们需要的是修改某个页面的请求响应编码,而不影响到其他页面
现给出解决办法一:重写InitializeCulture方法即可,加入Request.ContentEncoding 的设置
protected override void InitializeCulture() { base.InitializeCulture(); Request.ContentEncoding = Encoding.GetEncoding("gb2312"); }
解决办法二:获取表单数据字符串,自己解析
Encoding encoding = Encoding.GetEncoding("gb2312");//自选解码方式 Stream resStream = Request.InputStream;//接收的表单都是放这里的 byte[] content = new byte[resStream.Length]; resStream.Read(content, 0, content.Length); string postQuery = encoding.GetString(content); //NameValueCollection resDic = HttpUtility.ParseQueryString(postQuery, encoding);//解决编码方式问题,默认还是会自动解码
下面给出简单的解析方法:
/// <summary> /// 解析查询字符串 /// </summary> /// <param name="postQuery"></param> /// <returns></returns> private NameValueCollection GetFormParams(string postQuery) { NameValueCollection result = new NameValueCollection(); string[] nameValueList = postQuery.Split('&'); foreach (string item in nameValueList) { if (item.Contains('=')) { string[] nameValue = item.Split('='); result.Add(nameValue[0], nameValue[1]); } } return result; }
相关文章推荐
- asp.net SqlParameter关于Like的传参数无效问题
- 关于asp.net Session丢失问题的总结
- 关于使用asp.net调试器出现的问题及相关解决方法
- 关于ASP.NET在IIS一些问题的经验总结
- 关于ASP.NET对IIS注册的问题
- 关于用ASP.NET调用word或excel的权限问题
- 关于HttpUtility.UrlEncode,HttpUtility.UrlDecode,Server.UrlEncode,Server.UrlDecode
- 解决了asp.net 关于服务器版本不正确的问题
- asp.net 开发过程中关于image控件中图片点击后地址乱码的问题
- 关于ASP.NET中Request.QueryString的乱码问题
- 关于ASP.NET State service状态服务的问题
- c# asp.net uploadify 上传大文件 出现的 HTTP 404 问题
- 一个关于asp.net 中通用类的问题!
- 关于asp.net Session丢失问题的总结
- 关于Asp.net的FormView控件中,用FindControl方法找不到对应控件问题
- 关于AJAX调用ASP.NET MVC 或者WEBAPI项目提示I跨域问题的解决办法
- 关于asp.net页面通过url传值,中文出现乱码的一些有趣的问题~~~
- asp.net关于模式窗口刷新问题
- 关于ASP.NET控件DropDownList控件的问题
- ASP.NET中前台javascript与后台c#函数相互调用问题(1)http://hi.baidu.com/xuexiang516168/blog/item/90f2bc4bc316372908f7eff4.html