• 关于中文乱码的解决方法(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解码 这样一个过程是对称的当然最后会得到正确的结果了

  • 相关阅读:
    3种方法实现CSS隐藏滚动条并可以滚动内容
    javascript 计算两个整数的百分比值
    使用watch监听路由变化和watch监听对象的实例
    springboot全局捕获异常
    使用 Java 创建聊天客户端-2
    使用 Java 创建聊天客户端-1
    使用 ServerSocket 建立聊天服务器-2
    使用 ServerSocket 建立聊天服务器-1
    ServerSocket
    scheduled定时任务+实例请求数据库
  • 原文地址:https://www.cnblogs.com/sparkbj/p/5806455.html
Copyright © 2020-2023  润新知