从form表单提交信息到一个JSP页面或者一个Servlet进行处理的时候,提交的中文信息若不加处理的话就会显示乱码,如一串???。现在通过一个例子来进行总结如下:
写一个用户信息提交页面,通过这个页面向一个JSP页面或者一个servlet提交用户信息,代码如下:
1
2
3
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
9
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
10
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
12
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
现在写deal处理页面,代码如下:
1
2
3
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
从前面的信息提交页面提交来的信息包含中文,这时就会出现乱码。如:
??????您好,你的密码是:1234569,您的爱好是:????!
现在,把第8行的注释符号去掉,重新执行页面(请确保web服务器会自动加载更改后的页面,否则请重新启动web服务器),这时可以看到正确的中文信息了,如:
王冰您好,你的密码是:9856322,您的爱好是:音乐!
也可以使用另外一种方法进行处理,把deal.jsp的第8行注释掉,然后把第9行、第13行也注释掉,去掉第10行和第12行的注释符号,保存好重新执行页面(方法同上),同样会显示正常的信息。
下面通过前面的信息提交页面向一个servlet提交信息,然后对其中的中文乱码进行处理。写一个servlet程序(formdeal.java),如下:
1
packageorg.wzhongyu;2
3
importjava.io.IOException;4
importjava.io.PrintWriter;5
importjavax.servlet.ServletException;6
importjavax.servlet.http.HttpServlet;7
importjavax.servlet.http.HttpServletRequest;8
importjavax.servlet.http.HttpServletResponse;9
10
publicclassformdealextendsHttpServlet{11
publicvoiddestroy(){12
super.destroy();//Just puts "destroy" string in log13
//Put your code here14
}15
16
publicvoiddoGet(HttpServletRequest request, HttpServletResponse response)17
throwsServletException, IOException{18
this.doPost(request, response);19
}20
21
publicvoiddoPost(HttpServletRequest request, HttpServletResponse response)22
throwsServletException, IOException{23
//response.setContentType("text/html; charset=gbk");24
PrintWriter out=response.getWriter();25
//request.setCharacterEncoding("gbk");26
String username=request.getParameter("username");27
String password=request.getParameter("password");28
String love=request.getParameter("love");29
out.print("您的用户名:"+username+"
");//30out.print("您的密码:"+password+"
");//31out.print("您的爱好:"+love);//32
}33
publicvoidinit()throwsServletException{34
//Put your code here35
}36
}37
该servlet的部署描述文件(web.xml)如下:
1
<?xml version="1.0" encoding="UTF-8"?>2
xmlns="http://java.sun.com/xml/ns/javaee"4
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"5
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee6
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">7
8
This is the description of my J2EE component9
This is the display name of my J2EE component10
formdeal11
org.wzhongyu.formdeal12
13
14
15
formdeal16
/servlet/formdeal17
18
把信息提交页面的第7行改为:
重新部署并执行页面,同样看到显示的中文信息是乱码。现在把第23行的注释符去掉,重新执行会看到下面的信息,提交过来的中文信息是乱码:
您的用户名:??????
您的密码:123465
您的爱好:????把第25行的注释符也去掉,重新执行,可以看到可以显示正常的信息了,如下:
您的用户名:王冰
您的密码:5632215
您的爱好:音乐如果只去掉第25行的注释,执行程序则会显示下面的信息:
?????????
?????123456
???????由此可见,这个两个都不可以忽略掉,也可以从下面的方式验证必须写上两个,把formdeal.java里的第29,30,31行的中文换成英文,同样注释掉第23行,而不要注释掉第25行,执行后显示的信息如下:
username???
password65462458
love??
这是由于没有设置servlet响应的页面的字符编码造成的。
在servlet里也可以这样进行处理,把第25行注释掉,而不要注释第23行,把第26行和第28行分别改为如下代码:
String username=newString(request.getParameter("username").getBytes("iso-8859-1"),"gbk");
String love=newString(request.getParameter("love").getBytes("iso-8859-1"),"gbk");这样也可以正常显示中文信息。
1
2011年2月27日补充2
3
源于最近项目在不同的Linux系统中部署导致部分程序字符为乱码的问题,进行处理时需要注意以下问题:4
getBytes()方法在将字符串进行转码时,是根据操作系统平台的默认字符编码进行转码的。5
getBytes(Charset charset)方法是使用指定的字符编码进行转码。6
7
对于乱码问题,最好是项目的所有出入口都统一编码,文件的编码也要统一,请求部分使用过滤器进行处理。
posted on 2007-11-11 17:41 wzhongyu 阅读(3190) 评论(2) 编辑 收藏 所属分类: Java学习