解決Struts中文亂碼問題總結

在進行struts開發的過程當中。總也是出現很是多的亂碼問題。但歸根究竟,也僅僅是下面三種狀況: 

㈠頁面顯示中文亂碼 

㈡傳遞參數中文亂碼 

㈢國際化資源文件亂碼
 

如下就這三中狀況介紹怎麼在詳細項目中處理這些亂碼問題。java

而對於整體的處理思想。是要統一編碼爲: UTF-8.(以myeclipse6支持的struts1.3爲準) 

㈠頁面顯示中文亂碼 

      對於在頁面中顯示出現亂碼,這個問題比較簡單,即是檢查你的JSP文件中是否是出現了中文要處理。因爲JSP默認的編碼格式爲「ISO-8859-1」。當JSP中出現要處理的中文時。其顯示就出現亂碼了,這樣的狀況通常出現在手寫JSP,或改動時。因爲在myeclipse6.0中,假設出現了編碼錯誤時,程序不會讓你保存,而是會提示你注意編碼,這點很是好。web

詳細的改動辦法是把瀏覽器

Html代碼tomcat

  1. <%.@ page language="java" import="java.util." pageEncoding="ISO-8859-1">  


改爲:app

Html代碼eclipse

  1. <%.@ page language="java" import="java.util." pageEncoding="UTF-8">   



㈡傳遞參數中文亂碼 

         傳遞參數出現的亂碼,參數的內容爲中文。比方在struts應用中,簡單的一個登陸界面中。需要傳遞的登陸名爲中文時,你沒經處理以前,是會出現亂碼傳遞的。爲了讓咱們能看到顯示的亂碼,咱們在相應的Action類的子類裏,改動一下。用System.out把接受到的參數輸出,代碼例如如下:ide

Java代碼工具

  1. public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,   
  2.         HttpServletResponse response) ...{   
  3.     DynaActionForm loginForm = (DynaActionForm) form;   
  4.   
  5.     String username = (String) loginForm.get("username");   
  6.     String password = (String) loginForm.get("password");   
  7.     System.out.println("username:"+username);   
  8.     System.out.println("password:"+password);   
  9.     if (username.equals("ivorytower") && password.equals("123456")) ...{   
  10.         return mapping.findForward("success");   
  11.     }   
  12.     return mapping.findForward("fail");   
  13.     }  



那麼當你提交了中文輸入後就會出現亂碼了。 

詳細的解決方法: 

①改動Tomcat---->conf----->server.xml文件,在改動port的標籤後面加一行代碼。例如如下:post

Xml代碼編碼

  1.  port="8080" protocol="HTTP/1.1"    
  2.               connectionTimeout="20000"    
  3.               redirectPort="8443"  URIEncoding="UTF-8"/>  


②編寫過濾器Filter

Java代碼

  1.        
  2. import java.io.IOException;   
  3.   
  4. import javax.servlet.Filter;   
  5. import javax.servlet.FilterChain;   
  6. import javax.servlet.FilterConfig;   
  7. import javax.servlet.ServletException;   
  8. import javax.servlet.ServletRequest;   
  9. import javax.servlet.ServletResponse;   
  10.   
  11. public class CharacterEncodingFilter implements Filter ...{   
  12.   
  13.     @Override  
  14.     public void destroy() ...{   
  15.     }   
  16.   
  17.     @Override  
  18.     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,ServletException   {   
  19.     request.setCharacterEncoding("utf-8");   
  20.     chain.doFilter(request, response);   
  21.     }   
  22.   
  23.     @Override  
  24.     public void init(FilterConfig arg0) throws ServletException {   
  25.     }   
  26.   
  27. }  



  利用過濾器,把request傳遞的中文參數都設成「UTF-8」編碼。 

③改動web.xml文件 

    打開項目裏的web.xml文件,在前面加上例如如下代碼:

Xml代碼

  1.       
  2.   
  3. characterEncoding  
  4. com.v512.example.CharacterEncodingFilter  
  5.   
  6.   
  7. characterEncoding  
  8. /*  
  9.   


注意其過濾的URL爲「/*」,表示當前的request請求。

爲了使設置生效,重起tomcat。 

㈢國際化資源文件亂碼 

     ①利用JDK的native2ascii工具進行編碼轉換 

國際化問題。主要是爲了處理文件在瀏覽器上的顯示問題。仍是以登陸界面來講,比方在中文瀏覽器上,咱們要看到中文顯示,相應在英文瀏覽器上要顯示英文。那麼咱們在登陸那個界面處理上,就不能直接寫上咱們的「username」「password」等標識了。就要用標記轉換輸出了,改動爲:

Html代碼

  1.        
  2.  key="example.login.username"/>  


  再者,打開項目下的資源配置文件ApplicationResources.properties。根據上面所寫key值,設定成咱們要的默認值(顯示英文)。比方

引用

      
#Resource for Parameter 'com.v512.example.struts.ApplicationResources 
#Project webexample2 
example.login.username=username 
example.login.password=password


現在咱們動手新建一個資源文件,讓其能顯示中文,直接Ctrl+C。Ctrl+V。更名爲ApplicationResources_zh.properties,代碼例如如下:

引用

       
#Resource for Parameter 'com.v512.example.struts.ApplicationResources 
#Project webexample2 
example.login.username=用戶名 
example.login.password=密碼


但保存,myeclipse會報錯,這時咱們需要改動資源文件的編碼格式。Windons---->Preferences---->Content Type------>Text----->JavaPropertiesFile,把其Default encoding改成「utf-8」,按「update」更新。這樣就能進行保存了。

但是當咱們進行驗證會不是成功時,仍然給咱們的是亂碼。 

不急。咱們還得作一項任務。打開DOS窗體。CMD到資源文件所在文件夾,運用JDK的native2ascii工具把咱們新建的資源文件改爲還有一個名字的資源文件,好比bank.properties。

命令例如如下:

引用

     
>native2ascii -encoding gbk ApplicationResources_zh.properties bank.properties


打開bank.properties資源文件,本身主動生成的代碼例如如下:

引用

      
#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) 

example.login.username = \u7528\u6237\u540D 
example.login.password = \u5BC6\u7801


而後在myeclipse窗體中,把原來新建ApplicationResources_zh.properties 刪除,並把bank.properties改成ApplicationResources_zh.properties (爲了方便記憶,管理)。

而後重起tomcat或進行reload文件,咱們發現亂碼問題沒有了。  ②利用Eclipse ResourceBundle Editor插件工具        以上咱們是利用了JDK的native2ascii工具來處理國際化問題,但在EC中,另外一種更方便的工具專門用來處理編輯java的資源文件國際化亂碼問題,即Eclipse ResourceBundle Editor插件工具。安裝了這個插件後,咱們能進行方便的可視化資源文件編輯。推薦。。

相關文章
相關標籤/搜索