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

Tomcat URL 中文參數亂碼徹底解決:三層編碼統一設定指南

     編輯:程式設計疑難解答

問題現象

請求 /downloadservlet?name=小兒鼻出血.mp4 時,後端取得參數變亂碼。嘗試 new String(name.getBytes("ISO-8859-1"), "UTF-8") 反而產生新亂碼,URLDecoder 也無效。

根本原因

瀏覽器發送 URL 編碼、Tomcat 解碼、JSP/ Servlet 讀取參數三個環節編碼不一致導致。單靠代碼轉碼屬治標不治本。

三層統一設定 UTF-8

1. JSP 頁面編碼

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

2. Request/Response 過濾器統一編碼

@WebFilter("/*")
public class EncodingFilter implements Filter {
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) {
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        chain.doFilter(req, resp);
    }
}

或在 web.xml 註冊 Spring 提供的 CharacterEncodingFilter。

3. Tomcat server.xml 連接器設定

<Connector port="8080" protocol="HTTP/1.1"
           URIEncoding="UTF-8"
           connectionTimeout="20000"
           redirectPort="8443" />

驗證方式

重啟 Tomcat 後,直接在瀏覽器輸入含中文的 URL,後端 request.getParameter("name") 應直接取得正確字串,無需任何手動轉碼。

Tomcat 設定示意圖

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