JAVA 中URL中文参数乱码的处理方法

http://blog.csdn.net/luojia_wang/article/details/12850935



一般情况下url中文参数乱码,只要设置好页面编码格式,然后把tomcat的server.xml设置一下就好了,但是现在这个项目因为tomcat下面放的不止一个项目,改设置可能会引起其他项目的编码问题,所以不能改,为此颇纠结了一番,而网上很多方法就是用escape()、encodeURI()、encodeURIComponent()来编码,然后去后天通过硬编码new String(s.getBytes("iso-8859-1"),"gbk"); 但是很显然  硬编码是不行的,或者至少说不是通用的,换一个tomcat可能又错了。上面的编码方式只能把ISO的编码转成GBK,但是如果换一个tomcat,已经设置了UTF-8编码,那么这种编码肯定会出错。

     1、ajax提交乱码

     提交方式1:

[html]  view plain copy
  1. $.ajax({    
  2.    url:'<%=basePath%>/pages/getInfo.do',   
  3.    type: "POST",  
  4.    data:'TXTCONTENT=updateContactToServer&userInfo='+userid+"&groupId="+zd,  
  5.    success: function(jsonstr){  
  6.            var uid = $("#hideUserId").val();  
  7.         }     
  8. });    
      提交方式2:

[html]  view plain copy
  1. $.ajax({    
  2.    url:'<%=basePath%>/pages/getInfo.do?TXTCONTENT=updateContactToServer&userInfo='+userid+"&groupId="+zd,   
  3.    type: "POST",  
  4.    success: function(jsonstr){  
  5.             var uid = $("#hideUserId").val();  
  6.         }     
  7. });               
以上两种ajax提交方法如果参数userid是中文,那么第一种提交方法不会有问题,而方法二会有问题,原因我不是很清楚,但是分析一下,应该是第二种提交方式把参数作为URL  然后再tomcat中对URL用ISO-8859-1解码,所以中文出现乱码。而第一种提交方式中参数是在表单中提交,tomcat只对URL转码,所以中文参数不会出现乱码。只是个人分析,如有错误,求高人指点!如果有人用ajax提交出现乱码了,可以试试第一种方式提交一下。

       2、普通的URL请求乱码。

       网上很多人给出escape()、encodeURI()、encodeURIComponent()的解决方法,具体三个方法我就不解释了,网上很多。我想说的是 只用三个方法中的一个类似这样

[html]  view plain copy
  1. var url='<%=basePath%>/pages/deleteGroup.do?zdName='+encodeURIComponent(zdname)+"&groupId="+hideZD+"&count="+s; ;  
  2. window.location.href=url;  

    是不行的,到后台依然会出现乱码,必须用两次

[html]  view plain copy
  1. var url='<%=basePath%>/pages/deleteGroup.do?zdName='+encodeURIComponent(zdname)+"&groupId="+hideZD+"&count="+s; ;  
  2. window.location.href=encodeURI(url);  
  这样在后台才不会出现乱码,只不过我们在后台要用URLDecoder.decode("zdname", "UTF-8");解码一次!

      原因分析:在页面用encodeURIComponent或者encodeURI转码,能转成十六进制的字符串,但是在往服务器传递过程中URL首先要经过tomcat  而tomcat会对URL解码成中文,这样tomcat再传递到后台还是会出现中文乱码,而用encodeURIComponent转码两次的话,经过tomcat转码一次,还是十六进制字符串,在传递给服务器时接收的就还是转码后的字符串,然后我们在java代码中用URLDecoder解码一次就能出现正确中文了!

       同时,如果是java代码中使用httpclient的时候中的URL也可以URLEncoder和URLDecoder来转码和解码,原理一样。

       结语: 关于URL乱码的问题,网上很多都是讲解encodeURIComponent 或者是通过new String(s.getBytes("iso-8859-1"),"gbk");来解决,以上两种方法是我经过多次实验后获得的,原因分析可能不对,但是确实有用。如果对你有帮助,赞一个。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值