瀏覽器請求 (編碼) → Tomcat 解碼 → Java 字串 → 業務邏輯 → 資料庫存儲 (編碼)
▲ │
└──────────────────── 響應輸出 (編碼) ← 頁面渲染 (編碼) ←────────────┘
**任何一環編碼不一致即產生亂碼**。
| 層級 | 配置位置 | 關鍵設置 |
|---|---|---|
| IDE/編輯器 | File Encoding / Properties | Project Encoding = UTF-8 |
| Java 源文件 | javac 參數 | -encoding UTF-8 (Maven: properties>project.build.sourceEncoding) |
| Tomcat 請求解碼 | server.xml <Connector> | URIEncoding="UTF-8" useBodyEncodingForURI="true" |
| Servlet 請求/響應 | Filter / 代碼 | request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8") |
| JSP 頁面 | 頁面指令 | <%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %> |
| HTML 輸出 | <head> | <meta charset="UTF-8"> |
| 資料庫連接 | JDBC URL | ?characterEncoding=utf8&useSSL=false (MySQL) |
| 資料庫表/列 | DDL | CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci |
Content-Type 是否含 charset=UTF-8。SHOW VARIABLES LIKE 'character%'; 確認連接/庫/表編碼。CSDN 系統總結:Java Web 字符編碼問題完整解決方案