Java Web中文问题的几种解决方案

摘自王俊标编著的《精通Java Web开发-基于Struts EJB Hibernate JBuilder》一书:

1、页面请求
采用Filter过滤器方式:
web.xml片段

1 ……
2 <!-- filter配置 -->
3 < filter >
4 <!-- filter别名 -->
5 < filter-name > encodingfilter </ filter-name >
6 <!-- 类文件位置 -->
7 < filter-class > login3.EncodingFilter </ filter-class >
8
9 <!-- 定义属性encoding="gb2312"即指定编码类型 -->
10 < init-param >
11 < desription > encodetogb2312 </ desription >
12 < param-name > encoding </ param-name >
13 < param-value > gb2312 </ param-value >
14 </ init-param >
15 </ filter >
16
17 <!-- filter映射配置 -->
18 < filter-mapping >
19 <!-- 定义该filter处理所有格式的请求 -->
20 < filter-name > encodingfilter </ filter-name >
21 < url-pattern > /* </ url-pattern >
22 </ filter-mapping >
23 ……

EncodingFilter.java

1 import java.io.IOException;
2
3 import javax.servlet. * ;
4 import javax.servlet.http.HttpServlet;
5
6 public class EncodingFilter extends HttpServlet
7 implements Filter {
8
9 private FilterConfigfilterConfig;
10
11 private StringtargetEncoding = null ;
12
13 public void init(FilterConfigfilterConfig) throws ServletException {
14 this .filterConfig = filterConfig;
15 this .targetEncoding = this .filterConfig.getInitParameter( " encoding " );
16 }

17
18 public void doFilter(ServletRequestrequest,ServletResponseresponse,
19 FilterChainchain) throws IOException,ServletException {
20 try {
21 System.out.println( " targetEncoding: " + targetEncoding + " /n " );
22 request.setCharacterEncoding(targetEncoding);
23 chain.doFilter(request,response);
24 }
catch (ServletExceptionsx) {
25 filterConfig.getServletContext().log(sx.getMessage());
26 }
catch (IOExceptioniox) {
27 filterConfig.getServletContext().log(iox.getMessage());
28 }

29 }

30
31 public void destroy() {
32 this .filterConfig = null ;
33 this .targetEncoding = null ;
34 }

35 }

36


2、Web容器编码
在Tomcat的的源代码中的getParameter()方法,用户调用request.getParameter()方法时,首先调用parsetParameters()方法,在这里面将编码进行转换。如:
String s_target = new String (s_source.getBytes("iso-8859-1"), "gb2312);

3、数据库
MySQL 中文问题的主要原因是:它对数据进行编码时,采用了和底层的操作系统所不同的编码。通常MySQL在中文Windows平台上正确的编码方式是GBK。因 此只要将MySQL安装目录下的my.ini文件中的default-character-set选项设为GBK即可。

4、响应结果
对于Servlet的代码处理,可以使用:
……
respsonse.setContentType("text/html;charset=GB2312");
……
对于JSP文件,可以在开头部分添加如下声明:
……
<%@ page contentType="text/html;charset=GB2312" %>
……
对于HTML页面文件,则在开头部分添加声明如下:
……
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=GB2312">
</head>
……
5、XML文件
在采用"UTF-8"方式编码的情况下,使用XML文件存储中文数据常常会出现乱码的问题,建议使用"GB2312":
<?xml version='1.0' encoding="GB2312"

摘自【http://www.blogjava.net/tanzek/archive/2008/03/20/187407.html】

你可能感兴趣的:(java,Web)