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

JSP 中文亂碼徹底解決方案:頁面編碼、Tomcat URIEncoding、請求過濾器統一配置

     編輯:Java 綜合教學

JSP 中文亂碼徹底解決方案

中文亂碼根因在於瀏覽器、頁面、容器、JVM 多層編碼不一致。本文提供「統一編碼集、容器配置解碼、請求過濾器兜底」三層防線,徹底解決 GET/POST、HTML/JSP、Eclipse/Tomcat 多環境亂碼問題。

一、頁面編碼統一(第一防線)

1. HTML 頁面

<meta charset="UTF-8"> <!-- HTML5 簡寫 -->
<!-- 或舊版 -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

2. JSP 頁面

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  • contentType:響應頭 Content-Type,告訴瀏覽器解碼方式。
  • pageEncoding:JSP 文件本身保存編碼,編譯時讀取用。

Eclipse 設置:Window → Preferences → General → Workspace → Text file encoding = UTF-8;Content Types → JSP → Default encoding = UTF-8。

Eclipse 編碼設置

二、Tomcat 容器層解碼(第二防線)

修改 $CATALINA_HOME/conf/server.xml 中 <Connector>:

<Connector port="8080" protocol="HTTP/1.1"
           URIEncoding="UTF-8"
           useBodyEncodingForURI="true"
           connectionTimeout="20000"
           redirectPort="8443" />
  • URIEncoding:指定 URL 參數(GET 請求 Query String)解碼字符集,解決 GET 亂碼核心。
  • useBodyEncodingForURI:若 URIEncoding 未設置,則用請求體編碼(POST 表單編碼)解碼 URI,雙重保險。

Eclipse 內置 Tomcat 同步修改:Servers 視圖 → server.xml 同步上述配置。

Eclipse Tomcat 配置

三、請求編碼過濾器兜底(第三防線)

1. web.xml 配置

<filter>
    <filter-name>encodingFilter</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>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

Spring Boot 專案只需在 application.yml 設置:

server:
  servlet:
    encoding:
      charset: UTF-8
      force: true
      enabled: true

2. 手動設置(不推薦作為常規手段)

request.setCharacterEncoding("UTF-8"); // 必須在 getParameter() 前調用

四、常見坑點排查表

現象可能原因定位步驟
POST 正常,GET 亂碼Tomcat 未配 URIEncoding檢查 server.xml Connector
部署正常,Eclipse 運行亂碼Eclipse 內置 Tomcat 配置不同步Servers 視圖修改 server.xml
頁面顯示亂碼,數據庫存儲正常響應 Content-Type 缺失 charset檢查 page contentType / 過濾器 forceEncoding
文件上傳文件名亂碼Multipart 解析器編碼未設置Commons FileUpload / Servlet 3.0 MultipartConfig

五、最佳實踐總結

  1. 全項目強制 UTF-8(頁面、Java 文件、數據庫、JVM 參數 -Dfile.encoding=UTF-8)。
  2. Tomcat URIEncoding=UTF-8 + useBodyEncodingForURI=true。
  3. Spring 專案接入 CharacterEncodingFilter 並 forceEncoding=true。
  4. Eclipse/IDEA 工作區、文件類型編碼統一設置。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved