zoukankan      html  css  js  c++  java
  • JavaWeb中GET请求url传参中文乱码问题

    方式一:
             修改tomcat配置文件 ==> conf/server.xml ==> 添加“URIEncoding="utf-8"”
             <Connector port="8082" protocol="HTTP/1.1"  URIEncoding="utf-8" >
    方式二:
             前台: url = encodeURI(url)
             后台: String str = new String(request.getParameter("param").getBytes("iso8859-1"),"UTF-8");
    方式三:
            前台处理:
                    url = "http://localhost:8080/servletName?name=胡刚"
               =>url = "http://localhost:8080/servletName?name="+ encodeURI(encodeURI("胡刚")) 
            后台处理:
                    String name = request.getParamter("name");     第一次解码(服务器解码 即与方法一配置有关)
                    name = java.net.URLDecoder.decode(name,"UTF-8");     第二次解码
                       注:后台进行重定向时需要再次进行编码:
                           name  = java.net.URLEncoder.encode(name,"charset");
     
                
      两次编码两次解码的过程为:
     
    过程
    结果(中)
    描述
    ① UTF-8 [%E4,%B8,%AD] 按照utf-8方式获取字节数组变成[-28,-72-83],对字节码数组进行遍历,把每个字节转化成对应的16进制数,这样就变成了[E4,B8,AD],最后变成 [%E4,%B8,%AD]  此时已经没有了多字节字符,全部是单字节字符。
    ② UTF-8(ISO-8859-1) [%25E4,%25B8,%25AD] 会把%看成一个转义字符,并不编码%以后字符,会把%编码成%25.把数组最后变成[%25E4,%25B8,%25AD],然后就把处理后的数据[%25E4,%25B8,%25AD]发往服务器端,
    ③ ISO -8859-1
    [%E4,%B8,%AD] 当应用服务器调用getParameter方法,getParameter方法会去向应用服务器请求参数应用服务器最初获得的就是发送来的[%25E4,%25B8,%25AD],应用服务器会对这个数据进行URLdecode操作,应用服务器进行解码的这一次,不管是按照UTF-8,还是GBK,还是ISO-8859,,都能得到[%E4,%B8,%AD],因为都会把%25解析成%.并把这个值返回给getParameter方法
    ④ UTF-8 再用UTF-8解码一次,就得到"中"了。
      UTF-8->UTF-8(iso-8859-1)->iso-8859-1->UTF-8,编码和解码的过程是对称的,所以不会出现乱码。 想想看,如果不编码两次,当服务器自动解码的时候,假如是按照ISO-8859去解码UTF-8编码的东西,就是会出现乱码。
     
     
    POST方式不会出现乱码的原因:
           request.setCharacterEncoding(encoding);只对post请求有效;
            spring的CharacterEncodingFilter也只是做了request(和response).setCharacterEncoding(encoding);的操作。所以spring的filter配置不作用于get参数接收。
     
  • 相关阅读:
    电脑快捷键大全
    js实现页面跳转
    List转换为字符串方法
    Bootstrap4显示和隐藏元素
    反向代理和正向代理区别
    springboot系列一:工作环境无法联网下快速搭建boot项目
    英语故事系列:冠状病毒传播或导致2020首季度全球经济出现萎缩
    BBS网站的制作
    Flask-SQLAlchemy数据库操作
    step-by-step install Nginx反向代理服务器(Ubuntu 18.04 LTS)(转)
  • 原文地址:https://www.cnblogs.com/hugang2017/p/8416060.html
Copyright © 2011-2022 走看看