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

Tomcat 4.x JSP 中文亂碼完整解決方案:GET/POST/Cookie/URL 全場景覆蓋

     編輯:Java 相關知識

Tomcat 作為主流 JSP/Servlet 容器,在中文環境下常遭遇編碼問題。本文針對 Tomcat 4.0/4.1 整理六大常見亂碼場景,提供可直接套用的工具方法與配置技巧,經中文 Windows 98/2000 + JDK 1.3.1 實測有效。

通用編碼轉換工具類

public class EncodingUtil {
    // ISO-8859-1 → GB2312
    public static String toChinese(String input) {
        try {
            byte[] bytes = input.getBytes("ISO-8859-1");
            return new String(bytes, "GB2312");
        } catch (Exception e) { return null; }
    }

    // URL 編碼
    public static String encode(String value) {
        if (value == null || value.isEmpty()) return "";
        try { return java.net.URLEncoder.encode(value, "UTF-8"); }
        catch (Exception e) { return ""; }
    }

    // URL 解碼
    public static String decode(String value) {
        if (value == null || value.isEmpty()) return "";
        try { return java.net.URLDecoder.decode(value, "UTF-8"); }
        catch (Exception e) { return ""; }
    }
}

六大場景解決方案

1. JSP 頁面顯示「?」

頁面未指定字元集。在 JSP 頂部加入:

<%@ page contentType="text/html; charset=GB2312" %>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312">

2. POST 表單亂碼

Tomcat 4.1 預設以 ISO-8859-1 解讀 POST。

// 單一參數
String val = EncodingUtil.toChinese(request.getParameter("name"));

// 多值參數
String[] vals = request.getParameterValues("name");
if (vals != null) {
    for (int i = 0; i < vals.length; i++) {
        vals[i] = EncodingUtil.toChinese(vals[i]);
    }
}

3. GET 參數亂碼

同樣需轉碼,但 Tomcat 4.0 下 page.jsp?username=中文 無法直接用此法。

String val = EncodingUtil.toChinese(request.getParameter("username"));

4. Cookie 中文問題

版本寫入讀取
Tomcat 4.0自動編碼decode(cookie.getValue())
Tomcat 4.1new Cookie(name, encode("中文"))decode(cookie.getValue())

5. Tomcat 4.0 GET 參數無法還原

引擎限制,改用 URL 編碼傳遞:

// 產生連結
String url = "page.jsp?username=" + EncodingUtil.encode("中文");

// 取回
String val = EncodingUtil.toChinese(request.getParameter("username"));

6. JavaBean 中文處理

暫無通用方案,建議在 Controller 層統一轉碼後再注入 Bean。

最佳實務建議

  • 全站統一使用 UTF-8:JSP、HTML、web.xml、資料庫、JDBC URL 皆設定 UTF-8
  • 在 web.xml 設定 Filter 統一處理請求/回應編碼
  • Tomcat 5.5+ 可在 server.xml <Connector> 加入 URIEncoding="UTF-8"
  • 避免在 JavaBean、DAO 層處理編碼,集中在進入點解決

掌握編碼流向(瀏覽器 → HTTP → Servlet → JVM → 資料庫),並在邊界統一轉碼,是徹底解決中文亂碼的關鍵。

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