在JSP进行页面跳转或者表单提交时,经常会涉及到数据的传输,而其中经常用到传输中文文字,如果设置不当则会出现乱码情况这里转载别人的方法进行参考。
只是简单的JSP页面操作,并涉及框架,框架可以添加滤波器进行解决,在随后的文章中将进行介绍。
方法1:
在Jsp中,url中包含汉字就很容易发生乱码的问题,今天我就介绍下我是怎么解决url中包含汉字的时候发生乱码的解决办法!!
其实这个是个小问题,有很多的办法可以解决!!!不过前几天在写程序的时候却遇到他了,解决了很久都没有办法!!后来没办法使用比较笨的办法才解决,于是把他写出来以免以后忘记了!!
一般get方式传递的时候很容易遭遇乱码,比较常用的解决方法是
1
2
|
request.setCharacterEncoding(
"GBK"
);
String haokongjian = request.getParameter(“jspkongjian”);
|
前面加了句 request.setCharacterEncoding("GBK");
这个指定在接受的时候用gbk编码!! 当然也可以用gb2312或者utf-8,但是在知道这些编码的时候别忘记把.jsp页面的
1
|
<%@ page contentType=
"text/html; charset=GBK"
language=
"java"
import
=
"java.sql.*"
errorPage=
""
%>
|
和
1
|
<
meta
http-equiv
=
"Content-Type"
content
=
"text/html; charset=gbk"
/>
|
2个地方的编码也统一下!!!有人会问不统一会怎么样?实话说说这个我不知道我也没测试过,,,但是我想问为什么你不把他统一呢??
一般情况下通过上面的办法就可以解决get方式乱码的问题!!!我一直依赖都用这样的方法接收都是没有问题的,但是前几天就遇到个怪事,同样的方法在别的页面没有乱码问题,在另外个网页里就显示了乱码!!!于是咱们得接着找问题!!首先想到的是修改tomcat的编码!!!大家看我另外篇文章是介绍如何修改tomcat编码的http://www.jspkongjian.net/news.jsp?id=515
把tomcat编码修改后还是不能正常....这个时候就比较郁闷了....没办法,遇到问题咱们还得想办法解决,要记住程序是死的,他要是不正常肯定有他 不正常的原因,不要一有问题就怀疑是空间的,,,要想办法看看是什么地方出了问题!!为了验证我的request.getParameter接收页是否正常,我把传递方式由get换为post提交,结果发现不乱码了....由此可以确定是汉字在网络中用get方式传递的问题!!!案例到这里就算解决了,但是我发现我用post提交后用户体验很不好!!于是我在决定还是用get方式提交!!但是get方式又有乱码,怎么办呢??我想几年前写过一个接收参数可以保证不乱码!!于是把几年前写的代码翻找出来,,终于找到了共享给大家
1
|
String haokongjian =
new
String(request.getParameter(
"jspkongjian"
).getBytes(
"ISO-8859-1"
),
"GBK"
);
|
用这样的方式接收get的url中带汉字的参数,一看居然不乱码了,,还是这个方法管用!!,但是这个方法有个缺点,那就是如果要接受的参数(上面例子中的 jspkongjian) 没有传递参数为空,那么这个程序就要报错!!大家可以写个探测要接受的参数是不是属于空
1
2
3
4
5
6
7
|
String haokongjian =””;
//要接收参数的值
if
(jspkongjian==
null
|| jspkongjian==””){
out.print(“参数不能为空”);
return
;
}
else
{
haokongjian =
new
String(request.getParameter(
"jspkongjian"
).getBytes(
"ISO-8859-1"
),
"GBK"
);
}
|
这样就ok了!!!!
大致总结下遇到url中传递汉字发生乱码的情况,大家可以尝试的一些办法
1:使用request.setCharacterEncoding("GBK");方法
2:修改tomcat编码(修改办法http://www.jspkongjian.net/news.jsp?id=515)
3:改用post方式提交
4: 使用new String(request.getParameter("jspkongjian").getBytes("ISO-8859-1"),"GBK"); 解决
方法2:
<%@ page language="java" pageEncoding="UTF-8"%>
< !-- 告诉浏览器该jsp格式为utf-8,此时注意网页本身(右击->properties)的编码是否为utf-8 -->在head内加入:
<!-- 告诉服务器,这里采用的是utf-8 -->
< meta http-equiv="Content-Type" content="text/html; charset=utf-8">
3.1对于get请求:
String name2 = new String(name.getBytes("iso-8859-1"),"UTF-8");
3.2 对于post请求
request.setCharacterEncoding("utf-8");//对于post方法有效,对get无效.一定要放在解析的第一行,否则不行。
String name = request.getParameter("name");