工作中点滴记录

永远保持学徒心态

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

乱码,乱码,

公司的后台,在火狐,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表

http://hi.baidu.com/clayedu/item/51b2e353ddae55908c12edc6

posted on 2011-09-11 09:28  梦里故乡  阅读(5342)  评论(0编辑  收藏  举报