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:
- $.ajax({
- url:'<%=basePath%>/pages/getInfo.do',
- type: "POST",
- data:'TXTCONTENT=updateContactToServer&userInfo='+userid+"&groupId="+zd,
- success: function(jsonstr){
- var uid = $("#hideUserId").val();
- }
- });
- $.ajax({
- url:'<%=basePath%>/pages/getInfo.do?TXTCONTENT=updateContactToServer&userInfo='+userid+"&groupId="+zd,
- type: "POST",
- success: function(jsonstr){
- var uid = $("#hideUserId").val();
- }
- });
2、普通的URL请求乱码。
网上很多人给出escape()、encodeURI()、encodeURIComponent()的解决方法,具体三个方法我就不解释了,网上很多。我想说的是 只用三个方法中的一个类似这样
- var url='<%=basePath%>/pages/deleteGroup.do?zdName='+encodeURIComponent(zdname)+"&groupId="+hideZD+"&count="+s; ;
- window.location.href=url;
是不行的,到后台依然会出现乱码,必须用两次
- var url='<%=basePath%>/pages/deleteGroup.do?zdName='+encodeURIComponent(zdname)+"&groupId="+hideZD+"&count="+s; ;
- window.location.href=encodeURI(url);
原因分析:在页面用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");来解决,以上两种方法是我经过多次实验后获得的,原因分析可能不对,但是确实有用。如果对你有帮助,赞一个。