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

Eclipse 開發 Struts 徹底解決中文亂碼三大核心場景

     編輯:Java 程式設計入門

前言

Struts 專案中文亂碼是困擾開發者的經典問題,通常集中在三大場景:資源檔案中文顯示、表單輸入中文、資料庫讀取中文。本文提供經實戰驗證的完整解決方案,基於 Eclipse 環境與 Tomcat 容器。

場景一:Struts 資源檔案中文值顯示亂碼

根因

Properties 檔案預設以 ISO-8859-1 編碼儲存,中文需轉 Unicode 轉義序列(如 \u4e2d\u6587),直接寫入中文會導致讀取錯誤。

解決方案:Eclipse Properties Editor 外掛

  1. 安裝更新站點:https://propedit.sourceforge.jp/eclipse/updates/
  2. 路徑:Help → Software Updates → Find and Install → 新增遠端站點 → 輸入 URL
  3. 重啟 Eclipse 後,編輯 .properties 檔案時自動處理中文 ↔ Unicode 轉換

此外掛讓開發者直接編寫中文,儲存時自動轉義,讀取時自動還原,徹底消除手工 native2ascii 的痛苦。

場景二:表單輸入中文(含 textarea)顯示亂碼

根因

HTTP 請求參數預設以 ISO-8859-1 解碼,POST 請求體中文會被錯誤解碼為亂碼。

解決方案:字元編碼過濾器

最簡單方式:複用 Tomcat 內建 filters.SetCharacterEncodingFilter,在 web.xml 配置:

<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>

關鍵點

  • 過濾器必須在 web.xml 首個 filter-mapping 之前定義,確保最早攔截
  • 編碼值(GBK/UTF-8)必須與 JSP pageEncoding、資料庫連線編碼、瀏覽器提交編碼全鏈路一致
  • GET 請求參數編碼問題需額外在 Tomcat server.xml Connector 設定 URIEncoding="UTF-8"

場景三:資料庫讀取中文亂碼

根因

JDBC 驅動以 ISO-8859-1 讀取資料庫中文欄位,導致位元組錯誤解碼。

解決方案:應用層手動轉碼

while (rs.next()) {
    String col1 = rs.getString(1);
    String col2 = rs.getString(2);
    String col3 = rs.getString(3);
    float col4 = rs.getFloat(4);

    // 關鍵轉碼:ISO-8859-1 位元組 → GB2312 字串
    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");
}

更優方案:連線層面解決

在 JDBC URL 指定字元編碼,避免應用層手動轉碼:

  • MySQL: jdbc:mysql://host/db?useUnicode=true&characterEncoding=GBK
  • Oracle: 設定 NLS_LANG 環境變數或 oracle.jdbc.defaultNChar
  • PostgreSQL: ?charSet=GBK

連線層面統一編碼更簡潔、效能更佳、避免開發者遺漏轉碼。

全鏈路編碼一致性檢查清單

層級配置項建議值
JSP 頁面pageEncoding / contentType charsetUTF-8
HTTP 請求CharacterEncodingFilterUTF-8
Tomcat ConnectorURIEncodingUTF-8
JDBC 連線characterEncoding / charSetUTF-8
資料庫表/欄CHARSET / COLLATIONutf8mb4 / utf8mb4_unicode_ci
Java 來源檔IDE 編碼設定UTF-8

統一採用 UTF-8 可支援全字元集,避免 GBK 字元集不足導致罕見字錯誤。

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