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");