最近用jsp做网站,遇到最烦人的一件事情就是乱码问题
1、servlet接受中文参数乱码
这个比较容易解决,jsp的第一行加入
<%@ page language="java" pageEncoding="GBK"%>
具体的编码可以选择gbk、gb2312等
然后在servlet的doget、dopost等service方法中,在输出之前,也就是
PrintWriter out = response.getWriter();
这一行的前面加入
response.setContentType("text/html");
request.setCharacterEncoding("GBK");
response.setCharacterEncoding("GBK");
即可解决
2、jsp接受中文参数乱码
这个问题比较复杂,用out.println("中文")直接输出汉字时,如果出现乱码,一般就是上文提到的jsp文件第一行没有
<%@ page language="java" pageEncoding="GBK"%>
造成
然而即使加上了上面那一行,由url传递过来的中文参数仍然会显示乱码,这里的原因就是在tomcat将jsp页面编译为servlet的时候,仅仅把pageEncoding="GBK"编译为
response.setContentType("text/html;charset=GBK");
而并没有同时将request编码进行设定,必须在jsp中手工进行设定request.setCharacterEncoding,而设定的位置也很重要,我试过将request.setCharacterEncoding放在pageEncoding下面一行,或者出现乱码的那一行的前面,都没有解决问题,最后将request.setCharacterEncoding放在首次读request前,问题解决,也就是说,一定要在调用request前设置编码