Java的中文問題解決經典總結

當你是新手開始在學JSP的時候,肯定會遇到這樣的一個問題,你的頁面保存完打開或者寫到數據庫的東西,怎麼在頁面或數據庫中看到的卻是一堆的???,事實告訴你,你遇到了字符亂碼問題,沒辦法。baidu,google找啊找。太多了吧。各說風雲,你開始試, 有的可以有的不行,有的好用,有的卻不好用。至少我當初是這樣的感覺。。那個感覺是鬱悶加鬱悶!!自信心都可能受打擊呢,當然你身邊如果有高手,慢慢幫你解釋,那你真是太幸福了,不幸的是。我當初沒有啊。最後自己解決了。。。現在你要是一個最菜的,應該也可以在我的總結中把亂碼問題給K 掉。

廢話太多了。。往下看吧。

(1)顯示中文JSP頁面:<%@page ContentType="text/html;pageEncoding=gb2312" %>也可以把pageEncoding用charset=gb2312替。

這應該是在JSP頁面中最常用到的。也是網上見得最多的吧。對頁面當然有用了。不過你會不會在想。我總不能每一個頁面都改成這樣吧。。可以啊。下面的辦法。

(2)中文頁面提交返回獲取參數值時:<%request.setCharacterEncoding("gb2312");%>

用到這個的地方,好像比較多的是在Servlet中,還有比如在Struts中的FormBean的reset方法中。當然還有那些業務邏輯的程序中了。也有用。。不過還是不爽。。

(3)下面這個最實用,也是網上最統一的方法,也是一般開發項目中都會用到的吧。就是編寫一個過濾器,然後在web.xml中配置一下就OK了。相對上面的有點小複雜。不過它應該是最好的吧。至少我認爲(也許自己少見多怪說不定)

其它這個過濾器的類文件,在Tomcat的例子程序中有已經有了。你可以直接Copy它到你的工程中。更簡單吧。

不過我還是建議你自己寫出來。沒有壞處,就當是寫寫代碼了。

程序如下:

//************************************************************************//
/*
 * 創建日期 2005-9-6
 * TODO 字符編碼過濾器
 */
package summer.admin;

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

/**
 * @author Coldrain
 * TODO 字符編碼過濾器
 */
public class EncodingFilter implements Filter{
 protected FilterConfig filterConfig;
    private String targetEncoding = "gb2312";
   
    /**
     *初始化過濾器,和一般的Servlet一樣,它也可以獲得初始參數。
     */
    public void init(FilterConfig config) throws ServletException {
        this.filterConfig = config;
        if(config.getInitParameter("encoding") !=null){
         this.targetEncoding = config.getInitParameter("encoding");
        }
    }
   
    /**
      *進行過濾處理,這個方法最重要,所有過濾處理的代碼都在此實現。
      */
    public void doFilter(ServletRequest srequest, ServletResponse  sresponse, FilterChain chain)
        throws IOException, ServletException {
        System.out.println("使用以下方法對請求進行編碼:encoding="+targetEncoding);  
        HttpServletRequest request = (HttpServletRequest)srequest;
        request.setCharacterEncoding(targetEncoding);
        chain.doFilter(srequest,sresponse); // 把處理權發送到下一個
    }  

 public void setFilterConfig(final FilterConfig filterConfig)
 {
  this.filterConfig=filterConfig;
 }
   
    //銷燬過濾器
 public void destroy()
 {
  this.filterConfig=null;
 }
}
//************************************************************************//
然後在web.xml文件裏添加下列配置:
   <filter>
   <filter-name>encoding</filter-name>
   <filter-class>summer.admin.EncodingFilter</filter-class>
 <init-param>
     <param-name>encoding</param-name>
     <param-value>gb2312</param-value>
 </init-param>
  </filter>
  <filter-mapping>
       <filter-name>encoding</filter-name>
       <url-pattern>/*</url-pattern> 
  </filter-mapping>

這樣的話。。你的中文問題就可以搞定了。。

(4)還有一些什麼struts的資源文件中的中文問題,下個插件就搞定了,更簡單,或者用JDK自己提供的native2ascii也可以解決,只是沒那麼好看了。方法:native2ascii messages.properties messages_zh_CN.properties

上面的差不多就是我在J2EE開發學習過程中的總結吧。。當然我想應該還有其它的方法,現在沒遇到。遇到再說吧。。試試它們吧。。

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