乱码,乱码,
公司的后台,在火狐,IE9,ie8,通过url传递字符串,显示正常,但是用ie6 ,7的时候 ,显示的是乱码。
后发现通过url的get方式传递的字符串中有中文字符,想起在.NET的类库中有URLEncode这个类可以进行url的编码,但是我这是在页面的前端,要么js提供对url编码的方法,要么jquery提供对url编码的方法。经只能提示,发现有 3个方法可以对url进行编码;
这三个方法分别是:
encodeURI(),encodeURIComponent(),escape.
encodeURIComponent() 方法:
把
URI字符串采用UTF-8编码格式转化成escape格式的字符串。与encodeURI()相比,这个方法将对更多的字符进行编码,比如 /
等字符。所以如果字符串里面包含了URI的几个部分的话,不能用这个方法来进行编码,否则 /
字符被编码之后URL将显示错误。不会被此方法编码的字符:
如果用encodeURIComponent("test.aspx?id=aadfasf") 会出现错误
encodeURI() 方法:
把URI字符串采用UTF-8编码格式转化成escape格式的字符串。不会被此方法编码的字符:! @ # $& * ( ) = : / ; ? + '
escape() 方法:
集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符
在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是%20。unescape方法与此相反。不会被此方法编码的字符: @ * / +
在asp.net开发中,URL中如果将中文字符作为参数传递,则在通过QueryString获取得到的值可能会出错。比如通过下面的url:
1 string url = "decode.aspx?goodstype=孟潞研究组&name=孟潞"; 2 Response.Redirect(url);
在QueryString时,得到的goodstype与name都是“孟潞研究组”和“孟潞”,有时候还会得到如???????之类的乱码。说明url中传输中文字符时有问题的。
可以通过以下几种方案可以解决此类问题:
1、方案一,设置web.config 指定asp.net应用程序默认的请求和相应编码:
<configuration> <system.web> <globalization requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" fileEncoding="gb2312"/> <compilation debug="false" targetFramework="4.0" /> </system.web> </configuration>
2、方案二:在页面中head设置asp.net页面请求和相应的编码
1 <meta http-equiv="Content-type" content="text/html; charset=gb2312" />
3、方案三:
在传递中文之前,对将要传递的中文参数进行编码,在接受时候在进行解码
发送端:
1 string url = "decode.aspx?goodstype="+Server.UrlEncode("孟潞研究组")+"&name="+Server.UrlEncode("孟潞"); 2 Response.Redirect(url);
接收端:
string id =Server.UrlDecode(Request.QueryString["goodstype"]); string name =Server.UrlDecode(Request.QueryString["name"]); Response.Write(id + "<br/>" + name);
发送端:
通过js编码传输:
1 <script language="javascript" type="text/javascript"> 2 function urltest() { 3 window.location.href = 'decode.aspx?goodsType=' + escape("孟潞研究组") + "&name=" + escape("孟潞"); 4 } 5 </script>
接收端 :
if (!IsPostBack) { string id =Server.UrlDecode(Request.QueryString["goodstype"]); string name =Server.UrlDecode(Request.QueryString["name"]); Response.Write(id + "<br/>" + name); }
一般来说,设置web.config文件就可以啦,但是如果用js调用webserivce方法的话,那么设置web.config就无效啦!
4、让机器环境支持中文
如果以上方法还是不行,中文传递还是有问题,则可以试试如下办法
(1)将页面用记事本打开,然后选中“另存为”并选择“UTF-8”作为编码方式,而不是默认ascii。
(2)打开注册表:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\InetInfo\Parameters\FavorDBCS 值为0
(3)修改后,必须重启IIS,
附录:
字符编码种类:
http://blog.sina.com.cn/s/blog_69c189bf0100mt8v.html
国际化culture表
相信技术和创新的力量
喜欢快速反应的工作节奏