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

Tomcat 處理中文請求參數的內部機制與編碼配置最佳實踐

     編輯:程式設計綜合問答

解碼流程概覽

  1. 接收字節流:Connector 從 Socket 讀取原始字節數組。
  2. 解析請求行:InternalInputBuffer.parseRequestLine() 將字節解析為方法、URI、版本,URI 仍為字節數組(含 %XX)。
  3. URI 解碼:CoyoteAdapter.convertURI() 將 URI 字節數組按 URIEncoding(默認 ISO-8859-1)解碼為字符串。
  4. 參數解析:首次調用 request.getParameter() 觸發 Request.parseParameters(),對 Query String 或 POST Body 再次按 URIEncoding 解碼,填充參數 Map。

亂碼根因

默認 URIEncoding=ISO-8859-1 為單字節編碼,無法正確表示中文字符(雙字節),導致中文參數變為亂碼。

最佳配置

<Connector port="8080" protocol="HTTP/1.1"
           URIEncoding="UTF-8"
           useBodyEncodingForURI="true" />
  • URIEncoding="UTF-8":統一 URI 與參數解碼編碼。
  • useBodyEncodingForURI="true":POST 請求體編碼由 request.setCharacterEncoding() 決定,覆蓋 URIEncoding。

代碼層面補救

// Filter 中統一設置
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved