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

JSP 亂碼五大類型完整解決方案:從頁面到資料庫全鏈路修復

     編輯:關於JSP

JSP 亂碼問題可歸納為五大類型。本文提供系統性解決方案,涵蓋頁面編碼、請求參數解碼、轉發編碼、資料庫存取編碼四個關鍵環節。

五大亂碼類型與對策

1. JSP 頁面顯示亂碼

方案:頁面頂部指定編碼指令:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

IDE 級修復 (Eclipse/MyEclipse):Window → Preferences → General → Content Types → Text → JSP,將 Default Encoding 從 ISO-8859-1 改為 UTF-8,點 Update。新建檔案自動帶入正確編碼。

2. Servlet 接收 Form/Request 參數亂碼 (POST)

方案:在讀取參數前設定請求編碼:

request.setCharacterEncoding("UTF-8");

建議在 Filter 中統一處理 (如 Spring `CharacterEncodingFilter`),確保所有請求生效。

3. JSP 接收 Form/Request 參數亂碼 (POST)

同 Servlet,在 JSP 頁面讀取參數前插入:

<% request.setCharacterEncoding("UTF-8"); %>

4. `` 轉發後頁面亂碼

原因:Forward 共享同一 Request 物件,若源頁面未設定編碼,目標頁面讀取參數時用錯編碼。
方案:在 源頁面 (發起 forward 者) 設定 `request.setCharacterEncoding("UTF-8")`,目標頁面自動繼承正確編碼。

5. 資料庫存取亂碼

方案:JDBC 連線字串明確指定編碼:

// MySQL
jdbc:mysql://host:3306/db?useUnicode=true&characterEncoding=UTF-8
// Oracle
jdbc:oracle:thin:@host:1521:sid (需確保 DB、Client、JVM 字符集一致,建議 AL32UTF8)
// SQL Server
jdbc:sqlserver://host:1433;databaseName=db;sendStringParametersAsUnicode=true

同時確保資料表/欄位字符集為 UTF-8 (MySQL: `utf8mb4`)。

全鏈路 UTF-8 檢查清單

  1. 瀏覽器發送:`` / `Content-Type: text/html;charset=UTF-8`
  2. JSP 頁面:`pageEncoding="UTF-8" contentType="text/html;charset=UTF-8"`
  3. 請求解碼:`request.setCharacterEncoding("UTF-8")` (Filter 統一)
  4. 伺服器端處理:Java 內部使用 UTF-16,無需干預
  5. 回應編碼:`response.setContentType("text/html;charset=UTF-8")`
  6. 資料庫連線:JDBC URL 含編碼參數,表欄位字符集 UTF-8
  7. Tomcat:`server.xml` Connector `URIEncoding="UTF-8"` (解決 GET 參數)

亂碼本質是編碼/解碼不匹配。建立全鏈路 UTF-8 標準,配合 Filter 集中管理請求編碼,可徹底消除五大類亂碼。

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