Java Web的中文问题
摘自王俊标编著的《精通Java Web开发-基于Struts EJB Hibernate JBuilder》一书:
1、页面请求
采用Filter过滤器方式:
web.xml片段
……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
>
encode to gb2312
</
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
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文件,可以在开头部分添加如下声明:
……
<%@ 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"
浙公网安备 33010602011771号