zoukankan      html  css  js  c++  java
  • 关于中文乱码的解决方法(URL方式)

    假设
    keyWord ='阳光';

    url="play.jsp? keyWord ="+ keyWord

    若按照上述的地址直接访问,则中文会变成乱码。必须使用encodeURI()进行两次编码。如下:

    url="play.jsp? keyWord ="+encodeURI(encodeURI( keyWord ));


    服务器通过以下方式获取值:

    keyWord =URLDecoder.decode( keyWord ,"utf-8");

     

    则中文乱码问题解决。

    如果是通过servlet的二次转码还要在servlet中进行解码和再次编码

    //中文解码

    keyWord =URLDecoder.decode( keyWord ,"utf-8");

    //中文编码
       keyWord =URLEncoder.encode(keyWord , "utf-8");

    首先如果不编码,那些非英文abc等字符会被浏览器按照网页当前的字符集进行编码传到服务器去, 而服务器则只会按照服务器配置的字符集编码(有默认的好像就是ISOxxxx)进行解码,所以如果网页的字符集和服务器字符集解码一致那么就不会出乱码!

    但是往往对于我们来说是不一致的。所以一般情况会出现乱码, 所以就有人想到用encodeUri来进行编码再发送到服务器,但是要注意encodeUri来编码是以utf-8来进行编码的,而服务器对于url里面的非abc等字符进行解码几乎默认都不是utf-8
    所 以如果你encodeUri一次的话, 通过request.getParam...而得来的是被服务器以另外一种(一般是ISO...)编码解码得到的.所以通过utf-8编码过后 再通过ISO解码当然获得的是乱码, 即使你通过decode(xxx, 'utf-8')获取之后的也不对,因为这个过程是 utf-8编码 ---- iso解码 ----- utf-8解码,这个过程当然不对了哦!


    而通过两次编码再通过两次解码为什么就对了呢, 她是这么一个过程 utf-8编码-utf-8编码 --- ISO解码 ----utf-8解码。

    在这里要注意 因为通过第一次utf-8编码之后的都全是英文字符了,对于英文字符 utf-8编码 和ISO编码是一样的效果
    所以上面的过程就相当于 utf-8编码-ISO编码 --- ISO解码 ----utf-8解码 这样一个过程是对称的当然最后会得到正确的结果了

  • 相关阅读:
    BZOJ2039: [2009国家集训队]employ人员雇佣
    BZOJ2542: [Ctsc2001]终极情报网
    BZOJ2140: 稳定婚姻
    BZOJ3280: 小R的烦恼
    BZOJ3258: 秘密任务
    BZOJ2400: Spoj 839 Optimal Marks
    BZOJ3171: [Tjoi2013]循环格
    BZOJ1758: [Wc2010]重建计划
    BZOJ3175: [Tjoi2013]攻击装置
    机房破解程序
  • 原文地址:https://www.cnblogs.com/sparkbj/p/5806455.html
Copyright © 2011-2022 走看看