学海拾遗

生活、技术、思想无处不在学习
posts - 52, comments - 23, trackbacks - 0, articles - 3
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Java Web的中文问题

Posted on 2008-03-20 09:43 tanzek 阅读(476) 评论(0)  编辑  收藏

摘自王俊标编著的《精通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 > 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

 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文件,可以在开头部分添加如下声明:
         ……
         <%@ 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"


只有注册用户登录后才能发表评论。


网站导航: