当前位置: 移动技术网 > IT编程>开发语言>Java > JSP对URL链接中的中文乱码处理方法总结

JSP对URL链接中的中文乱码处理方法总结

2017年12月08日  | 移动技术网IT编程  | 我要评论

全球物流,情之缘,白牙传承

ie缺省对url后面的参数是不编码发送的,但是tomat缺省是按iso8859-1来进行url编码的,因此才会出错。

方法一:

对url链接进行二次编码:

<a onclick="javascript:window.open(encodeuri(encodeuri('./dispatchaction.do?efformename=fkry0001&code_type=中文参数')))">测试</a>

或者单独对参数进行二次编码:

var code_type = "中文参数";
code_type = encodeuri(code_type); 
code_type = encodeuri(code_type);
window.open("./dispatchaction.do?efformename=fkry0001&code_type="+code_type);
service:
string code_type = request.getparameter("code_type");
//这句话一定要写,因为如果不写的话编码就是%e5%a6%88%
code_type = java.net.urldecoder.decode(code_type,"utf-8");

有人提出为什么要在客户端对字符串重复编码两次呢?

如果因为项目需要,不能指定容器使用何种编码规则来解码提交的参数,比如:需要接收来自不同页面,不地编码的参数内容时。 (又或者是开发人员被这有点复杂的东西搞得晕头转向,不懂得如何正确的去做好这接收参数的工作)

这个时候,在客户端对参数进行二次编码,可以有效的避开“提交多字节字符”的这个棘手问题。

因为第一次编码,你的参数内容便不带有多字节字符了,成了纯粹的 ascii 字符串。(这里把编第一次的结果叫成 [str_enc1] 好了。[str_enc1] 是不带有多字节字符的)

再编一次后,提交,接收时容器自动解一次(容器自动解的这一次,不管是按 gbk 还是 utf-8 还是 iso-8859-1 都好,都能够正确的得到 [str_enc1])

然后,再在程序中实现一次 decodeuricomponent (java中通常使用 java.net.urldecoder.decode(***, "utf-8"))就可以得到想提交的参数的原值。

简单来说,就是tomcat服务器会自动帮你做一次urldecode,再加上你自己在service代码里面写的urldecode,一共就是两个decode了。既然要两次decode,当然就需要两次encode了。或许你会问,干脆只encode一次,然后在java代码里不decode,呵呵,这个也是不行的,这其实也就是为什么要进行两次encode的原因吧。

方法二:(经测试不支持ie8)

http://xxx.do?ptname=中文参数
string strptname = request.getparameter("ptname");
strptname = new string(strptname.getbytes("iso-8859-1"), "utf-8");

方法三:

<%@ page contenttype="text/html;charset=gb2312" %>
<a href="ds.jsp?url=<%=java.net.urlencoder.encode("编码的是这里","gb2312")%>">点击这里</a>
<%
//request.setcharacterencoding("gbk");
if(request.getparameter("url")!=null)
{
str=request.getparameter("url");
str=java.net.urldecoder.decode(str,"gb2312");
str=new string(str.getbytes("iso-8859-1"));
out.print(str);
}
%>

方法四:
tomcat中设置server.xml中的connector熟悉uriencoding="utf-8",确保解码格式与编码格式统一。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网