项目遇到了下面的问题:
我需要其他的网站给我传递的参数 ,对方那里是asp,采用的gb2312编码,传递的rul 如下 result.aspx?type=1&interface_re_type=0&interface_re_err=没有此用户,我也不清楚他的参数经过gb2312编码之后再地址栏还是完完整整的汉字,现在也没有想明白。
正常情况下 URL编码格式,如“汉”字:
GB2312编码:BABA URL格式:%BA%BA
UTF-8 编码:E6B189 URL格式:%E6%B1%89
这样我接受参数的时候只要 string interface_re_err = HttpUtility.UrlEncode(Request.QueryString["interface_re_err"].ToString(), Encoding.GetEncoding("GB2312"));就可以了,但是由于地址栏直接是汉字,这样还是乱码。
我解决问题的步骤如下,也包括不成功的步骤
1.由于aspx 默认的编码是utf-8,我尝试将 页面的编码格式改为:<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />,出现的情况是,页面上的汉字竟然都成了口口口,一些超链接的汉字 还是正常的,这个问题现在也不明白。总之,这是不可以行动,所以把页面改为了utf-8
2. 引入命名空间
using System.Text;
using System.Collections.Specialized;
string CurrentStr = Request.Url.Query;
System.Collections.Specialized.NameValueCollection nv= System.Web.HttpUtility.ParseQueryString(CurrentStr, System.Text.Encoding.GetEncoding("GB2312"));//这样便以GB2312编码格式进行解码
interface_re_err = nv["interface_re_err"];
这种情况还是针对 地址栏不是汉字的情况,是汉字话,解析出来还是乱码,不过这个乱码有点特殊,都是认识的汉字。这种方法也不通。
3 页面内编码,解码
interface_re_err = System.Web.HttpUtility.UrlEncode(interface_re_err, Encoding.GetEncoding("GB2312"));
interface_re_err = System.Web.HttpUtility.UrlDecode(interface_re_err, Encoding.GetEncoding("GB2312"));
也不行。
4.解决方案
采用了我最不愿意修改的文件 web.config, 因为该文件的重要性,对其他开发人员也有影响的文件,我一般很少去动,尽量在自己的页面完成,但这次看来是不行了。
web.config文件
<globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8"/>
改为
<globalization requestEncoding="gb2312" responseEncoding="gb2312" fileEncoding="utf-8"/>
接收参数页面 interface_re_err = Request.QueryString["interface_re_err"].ToString();
看来这样修改,网站请求发送成了真正的 Chinese 化了,一个小小的问题忙了快一个下午,解决问题的能力还是不行,想起了在实习时候项目经理在我离开的时候的一席话,我们看中的是你个人解决问题的能力,快速的学习能力,而不是看你目前掌握了几种语言。
明年就要毕业了,也不想在这里领域里 敲字了,还是想过个宁静,安稳的生活,尽管人还年轻。但总有些过于现实了,思考的过多了。