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

Web 開發中文亂碼終極解決方案:GET/POST、Tomcat、過濾器、數據庫全鏈路編碼統一

     編輯:Java 綜合教學

亂碼根因:編碼不一致

中文亂碼本質是編碼與解碼字符集不匹配。全鏈路涉及:瀏覽器 → Tomcat → Servlet → Java 代碼 → 數據庫。任何一環不一致即產生亂碼。

方案一:JSP 頁面編碼聲明

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

JSP 編碼聲明

方案二:POST 請求編碼設置

在讀取參數前設置:

request.setCharacterEncoding("UTF-8");

POST 編碼設置

方案三:URL 編碼處理(GET 請求核心)

GET 參數在 URL 中,request.setCharacterEncoding 無效。兩種處理:

  • 客戶端編碼:JS encodeURI("https://localhost/test?name=中文")
  • 服務端配置 Tomcat URIEncoding(推薦,一勞永逸)

修改 Tomcat server.xml

<Connector URIEncoding="UTF-8"
    port="8080" maxHttpHeaderSize="8192"
    maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
    connectionTimeout="20000" disableUploadTimeout="true" />

只需添加 URIEncoding="UTF-8",重啟 Tomcat 即可。

Tomcat 配置

方案四:Spring 編碼過濾器(推薦生產環境)

在 web.xml 中第一個配置:

<filter>
    <filter-name>charsetFilter</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>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>charsetFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

內部相當於對所有請求/響應強制:

request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");

方案五:數據庫層編碼統一

層級設置建議
數據庫CREATE DATABASE db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
表CREATE TABLE t (...) CHARSET=utf8mb4;
列col VARCHAR(100) CHARACTER SET utf8mb4
連接串jdbc:mysql://...?characterEncoding=utf8&useUnicode=true

表設計編碼

全鏈路檢查清單

  1. ✅ JSP/HTML <meta charset="UTF-8">
  2. ✅ Tomcat URIEncoding="UTF-8"
  3. ✅ Spring CharacterEncodingFilter(首位)
  4. ✅ Java 代碼 request.setCharacterEncoding("UTF-8")(POST)
  5. ✅ 數據庫/表/列 utf8mb4
  6. ✅ JDBC URL characterEncoding=utf8
  7. ✅ IDE 文件編碼設置為 UTF-8

常見誤區

  • ❌ 以為 request.setCharacterEncoding 能解決 GET 亂碼
  • ❌ 數據庫用 utf8 而非 utf8mb4(無法存 Emoji)
  • ❌ 過濾器順序錯誤,未在最前面
  • ❌ 僅修改一層,忽略全鏈路

統一全鏈路 UTF-8(推薦 utf8mb4),配合 Spring 過濾器與 Tomcat URIEncoding,可徹底根治中文亂碼問題。

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