我们做Web程项目的时候经常会遇到中文乱码的问题,因为Http协议中默认的编码字符集不是中文的,并且平台字符集也不是中文的,这就需要我们手动把它改成中文字符集,防止后台显示乱码。

    首先我们要清楚我们是改不了别人的字符集的,我们只需关心我们自己的运行平台上的字符集是中文的,并且request请求和response响应里面的字符集改成中文的就可以了。这是因为我们要把传递过来的数据字符集改成中文编码形式的才能在我们的平台上正常显示,响应的编码形式也要改成中文的才有可能在别人的平台上显示成中文形式。

    首先我们要把自己平台上的编码形式改成中文的,也就是你平台上每一个网页的编码形式是中文的,HTML网页中的charset改成UTF-8,JSP网页中的pageEncoding改成UTF-8或者GBK。

    其次,我们要把Http协议中发送过来的请求编码改成中文形式,由于对你平台的任何网页都要处理请求中的编码问题,所以我们就要做一个过滤器,它的作用是每一次对你项目中任何网页的请求都要经过这个过滤器的处理才能进入。有了这个过滤器我们就不再担心字符集编码的问题了,因此我们要写一个字符集转换的类,并且在Web.xml中配置它,以下是该类源代码和配置过程:

<filter>   
  <filter-name>EncodingFilter</filter-name>   
  <filter-class>com.bx.servletform.EncodingFilter</filter-class> 
  <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
  </init-param>    
</filter> 
         
<filter-mapping>   
        <filter-name>EncodingFilter</filter-name>   
        <url-pattern>/*</url-pattern>    
</filter-mapping>

源代码是如下:
public class EncodingFilter implements Filter{

    String encoding 
= "";
    
public void destroy() {
        
    }

    
    
public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) 
throws IOException, ServletException {
        
        System.out.println(
"pass here------------");
        request.setCharacterEncoding(encoding);
        response.setCharacterEncoding(encoding);
        chain.doFilter(request, response);
    }

    
    
public void init(FilterConfig config) throws ServletException {
        String encoding 
= config.getInitParameter("encoding");
        
this.encoding = encoding;
        System.out.println(
"初次访问"+encoding);
    }

}


    这样,每次对网页的请求都会进入到这个过滤器中,并且把request和response的编码形式改成UTF-8形式,防止了中文乱码。