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参数接收。
 

转载于:https://www.cnblogs.com/hugang2017/p/8416060.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值