首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Eclipse 下 Struts 開發三大亂碼問題完美解決

     編輯:Java 相關知識

Struts 1.x 專案在 Eclipse 中常遇三類亂碼,本文給出針對性解決方案,覆蓋資源檔、表單提交、資料庫讀取全鏈路。

問題一:struts-config.xml / ApplicationResources.properties 中文值顯示亂碼

原因:Properties 檔案規範要求 ISO-8859-1 編碼,中文需 Unicode 轉義 (\uXXXX),Eclipse 預設不轉義。

解決:安裝 Properties Editor 插件(Eclipse Marketplace 搜尋安裝),編輯 .properties 時自動雙向轉換中文 ⇄ Unicode,所見即所得。

問題二:表單輸入中文 (含 textarea) 提交後亂碼

原因:Tomcat 預設用 ISO-8859-1 解碼請求參數,瀏覽器實際發送 UTF-8/GBK。

解決:配置 CharacterEncodingFilter (Tomcat 內建 filters.SetCharacterEncodingFilter):


<filter>
  <filter-name>SetCharacterEncoding</filter-name>
  <filter-class>filters.SetCharacterEncodingFilter</filter-class>
  <init-param>
    <param-name>encoding</param-name>
    <param-value>GBK</param-value>  
  </init-param>
</filter>
<filter-mapping>
  <filter-name>SetCharacterEncoding</filter-name>
  <url-pattern>*.do</url-pattern>  
</filter-mapping>

原理:Filter 在請求進入 Action 前調用 request.setCharacterEncoding(encoding),強制指定解碼字集。

問題三:從資料庫讀出中文亂碼

原因:JDBC 驅動預設用 ISO-8859-1 讀取字節,實際資料庫存儲為 GB2312/GBK/UTF-8。

解決:在 Java 代碼中手動轉碼 (以 GB2312 為例):


while (rs.next()) {
    String col1 = rs.getString(1);
    String col2 = rs.getString(2);
    String col3 = rs.getString(3);
    // 關鍵:先按 ISO-8859-1 取回字節陣列,再按實際編碼構建字串
    col1 = new String(col1.getBytes("ISO-8859-1"), "GB2312");
    col2 = new String(col2.getBytes("ISO-8859-1"), "GB2312");
    col3 = new String(col3.getBytes("ISO-8859-1"), "GB2312");
    // 後續使用 col1/col2/col3 即為正確中文
}

更佳方案:JDBC URL 加入 characterEncoding=GBK (MySQL) 或 useUnicode=true&characterEncoding=UTF-8,驅動層自動轉碼,代碼零侵入。

總結表

亂碼來源核心原因解決關鍵
資源檔Properties 規範限制Properties Editor 插件自動 Unicode 轉義
表單提交Tomcat 預設 ISO-8859-1 解碼CharacterEncodingFilter 強制 request.setCharacterEncoding
資料庫讀取JDBC 驅動預設 ISO-8859-1 讀取手動轉碼 或 JDBC URL 指定 characterEncoding

徹底解決亂碼核心原則:全鏈路統一字集 (建議 UTF-8)——JSP pageEncoding、HTML meta charset、JS 檔案編碼、Filter encoding、資料庫/表/欄位 charset、JDBC URL characterEncoding、JVM -Dfile.encoding=UTF-8。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved