我們做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形式,防止了中文亂碼。