zoukankan      html  css  js  c++  java
  • 通过Url传字符串 出现乱码问题的解决

    乱码,乱码,

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

    怀揣着一点点梦想的年轻人
    相信技术和创新的力量
    喜欢快速反应的工作节奏
  • 相关阅读:
    JS输入框正则校验
    JVM 参数查看与设置
    Java 设计模式汇总
    Android Notification
    Android PendingIntent
    Android AsyncTask详解
    Java Stake实现
    Camera2相机预览流程
    java annotation
    Java io包 FileInputStream&FileOutStream
  • 原文地址:https://www.cnblogs.com/hfliyi/p/2173509.html
Copyright © 2011-2022 走看看