摘自王俊标编著的《精通Java Web开发-基于Struts EJB Hibernate JBuilder》一书:
1、页面请求
采用Filter过滤器方式:
web.xml片段
1
……
2
3
<
filter
>
4
5
<
filter-name
>
encodingfilter
filter-name
>
6
7
<
filter-class
>
login3.EncodingFilter
filter-class
>
8
9
10
<
init-param
>
11
<
desription
>
encode to gb2312
desription
>
12
<
param-name
>
encoding
param-name
>
13
<
param-value
>
gb2312
param-value
>
14
init-param
>
15
filter
>
16
17
18
<
filter-mapping
>
19
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
FilterConfig filterConfig;
10
11
private
String targetEncoding
=
null
;
12
13
public
void
init(FilterConfig filterConfig)
throws
ServletException
{
14
this
.filterConfig
=
filterConfig;
15
this
.targetEncoding
=
this
.filterConfig.getInitParameter(
"
encoding
"
);
16
}
17
18
public
void
doFilter(ServletRequest request, ServletResponse response,
19
FilterChain chain)
throws
IOException, ServletException
{
20
try
{
21
System.out.println(
"
targetEncoding :
"
+
targetEncoding
+
"
\n
"
);
22
request.setCharacterEncoding(targetEncoding);
23
chain.doFilter(request, response);
24
}
catch
(ServletException sx)
{
25
filterConfig.getServletContext().log(sx.getMessage());
26
}
catch
(IOException iox)
{
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文件,可以在开头部分添加如下声明:
……
……
对于HTML页面文件,则在开头部分添加声明如下:
……
……
5、XML文件
在采用"UTF-8"方式编码的情况下,使用XML文件存储中文数据常常会出现乱码的问题,建议使用"GB2312":
tanzek 2008-03-20 09:43 发表评论