摘自王俊标编著的《精通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"
本文介绍了在JavaWeb开发中处理各种编码问题的方法,包括使用Filter过滤器统一编码、配置Tomcat处理参数编码、设置数据库编码、指定响应编码及解决XML文件中的乱码问题。
2882

被折叠的 条评论
为什么被折叠?



