<%@ page pageEncoding="UTF-8" %>;<form method="post">(GET 請求 Spring 編碼過濾器無效)。<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value> <!-- 關鍵:強制覆蓋 request/response 編碼 -->
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
檢查數據庫、表、字段字符集均為 utf8 或 utf8mb4,然後在連接池配置中追加參數:
<property name="url" value="jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=UTF-8" />
注意:若配置文件為 .properties 格式,& 不需轉義;若為 XML 格式,必須寫成 &。
response.setContentType("application/json;charset=UTF-8");
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"
useBodyEncodingForURI="true" />
<connection-url>jdbc:mysql://ip/db?useUnicode=true&characterEncoding=UTF-8</connection-url>
-- 查看當前字符集 SHOW VARIABLES LIKE 'character_set_%'; -- 修改庫/表/列字符集 ALTER DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; ALTER TABLE tblname CONVERT TO CHARACTER SET utf8mb4; -- 連接級臨時設置 SET NAMES utf8mb4;
| 層級 | 檢查項 | 關鍵配置 |
|---|---|---|
| 頁面 | pageEncoding / contentType | UTF-8 |
| 請求 | CharacterEncodingFilter + forceEncoding | UTF-8 / true |
| Controller | response.setContentType | charset=UTF-8 |
| 數據庫連接 | JDBC URL 參數 | useUnicode=true&characterEncoding=UTF-8 |
| 數據庫對象 | 庫/表/列字符集 | utf8mb4 |
| 服務器 | Connector URIEncoding | UTF-8 |
逐項對照配置,即可徹底消除 Spring MVC 全鏈路中文亂碼問題。