tomcat中文問題

解決在tomcat5。0下編寫web應用的
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


中文問題

 

一、                 JSP頁面亂碼(中文顯示爲問號)

  現象:JSP頁面生成的中文數據在瀏覽器端顯示爲亂碼,但是靜態HTML代碼中文則顯示正常。

 

原因:TOMCAT50JSP頁面的默認編碼方式是ISO-8859-1,在動態生成的HTML代碼時按照ISO-8859-1(西歐字符)編碼,所以顯示中文時全部爲問號。

 

解決方法:在所有的JSP頁面里加上

   <%@ PAGE CONTENTTYPE=”TEXT/HTML;CHARSET=GB2312”>

TOMCAT5.0在解析JSP頁面的時會將編碼方式改爲GB2312,這時中文顯示正常。

 

 

二、                 INCLUDE進來的JSP頁面的中文亂碼

     

        現象:外層JSP頁面的中文顯示正常,但INCLUDE進來的JSP頁面(內層頁面)的中文顯示亂碼。

       

        原因:在外層的JSP頁面中用上面<>中的方法處理之後,外層的JSP頁面正確的按照GB2312的編碼方法解析,但內層(即INCLUDE進來的JSP葉面)還是按照TOMCAT的默認編碼方式ISO-8859-1方式編碼,所以造成內層頁面的中文顯示不正常。

 

解決方式:同上,在所有的內層JSP頁面里加上

   <%@ PAGE CONTENTTYPE=”TEXT/HTML;CHARSET=GB2312”>,中文顯示即可恢復正常。

 

注:同一個JSP頁面中不能出現兩個

            <%@ PAGE CONTENTTYPE=”TEXT/HTML;CHARSET=GB2312”>

 

 

 

三、                 POST方式提交的表單數據中的中文亂碼

             

        現象:用POST方式提交的表單數據出現亂碼。

      原因:Tomcat在接收到請求後,並沒有能夠根據request中的信息設置正確的編碼方式,而是採用默認編碼方式ISO-8859-1編碼,所以提交的表單中文數據全部爲問號。

      解決:可以添加一個設置字符集的過濾器,將request中的編碼方式改爲GB2312TOMCAT

能正確的將POST方式提交的數據編碼。過濾器的內容如下:

package filters;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.UnavailableException;

public class SetCharacterEncodingFilter implements Filter {
 protected String encoding = null;
 protected FilterConfig filterConfig = null;
 protected boolean ignore = true;

 public void destroy() {
  this.encoding = null;
  this.filterConfig = null;
 }

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {

 // 設置正確的編碼方式
 if (ignore || (request.getCharacterEncoding() == null)) {
  String encoding = selectEncoding(request);
  if (encoding != null)
   request.setCharacterEncoding(encoding);
 }

 // 傳遞到下一層過濾器
 chain.doFilter(request, response);

}

public void init(FilterConfig filterConfig) throws ServletException {

 this.filterConfig = filterConfig;
 this.encoding = filterConfig.getInitParameter("encoding");
 String value = filterConfig.getInitParameter("ignore");
 if (value == null)
  this.ignore = true;
 else if (value.equalsIgnoreCase("true"))
  this.ignore = true;
 else if (value.equalsIgnoreCase("yes"))
  this.ignore = true;
 else
  this.ignore = false;

}

protected String selectEncoding(ServletRequest request) {
 return (this.encoding);
}

}


  編好了過濾器之後,還要在TOMCAT中配置過濾器。

    打開WEB-INF目錄下的web.xml文件,添加下面的內容:

filter
 <filter-nameSet Character Encoding/filter-name
 <filter-classfilters.SetCharacterEncodingFilter/filter-class
 <init-param
  <param-nameencoding/param-name
  <param-valueGB2312/param-value
 </init-param
/filter

filter-mapping
 <filter-nameSet Character Encoding/filter-name
 <url-pattern/*/url-pattern
/filter-mapping

 

 

四、                 JAVASERVLET中輸出的中文亂碼

 

 

現象:在JAVASERVLET中用PRINTWRITER輸出的中文亂碼.,瀏覽器接收的HTML數據的編碼方式爲ISO-8859-1(西歐字符)這時如果在瀏覽器端手動的將頁面的編碼方式改爲GB2312GBK則頁面的中文顯示正常。

 

 

 原因:TOMCAT50頁面的默認編碼方式是ISO-8859-1,瀏覽器在收到由JSP頁面生成的HTML數據時也會將HTML的數據的編碼方式設爲ISO-8859-1,所以造成頁面上的中文字符顯示爲亂碼。

 

 

         解決方法:

 

如下面這段代碼:

 

  PrintWriter out   = response.getWriter();

  out.println("<html>");

  out.println("<head>");

  out.println("</head>");

  out.write(“錯誤!可能是由於信息已過期!!”);

          out.println("</html>");

         首先輸出是要將response reset,這個我也不知道什麼原因,reset後在按照下面的方式處理。

         然後要告訴瀏覽器該頁面要以什麼方式編碼,添加。

                                                response.setContentType("text/html;charset=GB2312");

 

告訴瀏覽器HTML數據的編碼是GB2312,再將輸出的每一句中文改爲以ISO-8859-1編碼方式編碼,改完後整個代碼如下:

            response.reset();

            response.setContentType("text/html;charset=GB2312");

            out.println("<html>");

            out.println("<head>");

            out.println("</head>");

            out.write(new String("錯誤!可能是由於信息已過期!!".getBytes(),"ISO-8859-1"));

out.println("</html>");

 

這時輸出的中文就能正確的顯示了。

 

 

五.                 在資源文件中的中文數據輸出到JSP頁面上爲亂碼

  

 現象:用<BEANWRITE>標籤在JSP頁面上輸出預先已編入資源文件的中文信息時顯示爲亂碼。

 

         原因:編入資源文件的信息如果不是西歐字符就必須用NATIVE2ASCII工具將其編碼方式改爲ASCII編碼方式。

        

         解決方法:NATIVE2ASCIIJDK自帶的工具,在   你的JDK目錄/BIN  目錄下。其使用方法如下

               

APP.RES 是正常的可看的中文資源文件

                APPLICATIONRESOURCES.PROPERTIES要生成的能正常顯示的資源文件

               

                NATIVE2ASCII APP.RES APPLICATIONRESOURCES.PROPERTIES

        

         轉換完畢後,使用<BEAN:WRITE>標籤輸出的中文信息就能正確的顯示了。

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章