URL传参时中文参数乱码的解决方法

URL传参时,中文参数乱码的解决:

今天在工作中遇到了这样的一个问题,在页面之间跳转时,我将中文的参数放入到url中,使用location进行跳转传参,但是发现接收到的参数值是乱码。我的代码是这样写的:

1.跳转前,对url进行了编码:

url = EMPTools.encodeURI(url);

window.location = url;

2.接收时,对url进行了解码:

url = decodeURI(url);

发现:接收到的信息并非正常的那种%和数字的编码,而是彻底的乱码(有方框有英文字母);

费解!

查找资料后,发现有些人的解决方式是将url二次编码,于是改为:

1.跳转前,对url进行二次编码:

url = EMPTools.encodeURI(EMPTools.encodeURI(url));

window.location = url;

2.接收时,对url进行了解码:

url = decodeURI(url);

发现:这次接收到的是含有%和数字的正常的url编码,但仍然不是汉字。

挠头!

细想后,既然编码时时二次编码,那解码时也应该是二次解码啊!

于是修改为:

1.跳转前,对url进行二次编码:

url = EMPTools.encodeURI(EMPTools.encodeURI(url));

window.location = url;

2.接收时,对url进行二次解码:

url = decodeURI(decodeURI(url));

结果:终于接收到正常的中文参数了!

疑问:为什么需要进行二次编码呢?

备注:

在jsp页面的中,最好能在调用request的所有方法的语句之前,加上设置request编码类型的代码:

request.setCharacterEncoding("UTF-8");

参考:http://blog.sina.com.cn/s/blog_683b7a840100iqh5.html

原文地址:https://www.cnblogs.com/duffy/p/4921078.html