我們做Web程項(xiàng)目的時(shí)候經(jīng)常會(huì)遇到中文亂碼的問題,因?yàn)镠ttp協(xié)議中默認(rèn)的編碼字符集不是中文的,并且平臺(tái)字符集也不是中文的,這就需要我們手動(dòng)把它改成中文字符集,防止后臺(tái)顯示亂碼。

    首先我們要清楚我們是改不了別人的字符集的,我們只需關(guān)心我們自己的運(yùn)行平臺(tái)上的字符集是中文的,并且request請(qǐng)求和response響應(yīng)里面的字符集改成中文的就可以了。這是因?yàn)槲覀円褌鬟f過來的數(shù)據(jù)字符集改成中文編碼形式的才能在我們的平臺(tái)上正常顯示,響應(yīng)的編碼形式也要改成中文的才有可能在別人的平臺(tái)上顯示成中文形式。

    首先我們要把自己平臺(tái)上的編碼形式改成中文的,也就是你平臺(tái)上每一個(gè)網(wǎng)頁的編碼形式是中文的,HTML網(wǎng)頁中的charset改成UTF-8,JSP網(wǎng)頁中的pageEncoding改成UTF-8或者GBK。

    其次,我們要把Http協(xié)議中發(fā)送過來的請(qǐng)求編碼改成中文形式,由于對(duì)你平臺(tái)的任何網(wǎng)頁都要處理請(qǐng)求中的編碼問題,所以我們就要做一個(gè)過濾器,它的作用是每一次對(duì)你項(xiàng)目中任何網(wǎng)頁的請(qǐng)求都要經(jīng)過這個(gè)過濾器的處理才能進(jìn)入。有了這個(gè)過濾器我們就不再擔(dān)心字符集編碼的問題了,因此我們要寫一個(gè)字符集轉(zhuǎn)換的類,并且在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);
    }

}


    這樣,每次對(duì)網(wǎng)頁的請(qǐng)求都會(huì)進(jìn)入到這個(gè)過濾器中,并且把request和response的編碼形式改成UTF-8形式,防止了中文亂碼。