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

URL 傳遞中文參數亂碼終極解決方案:雙重編碼與解碼

     編輯:Java 程式設計入門

問題根因

URL 標準僅允許 ASCII 字符,中文經瀏覽器編碼(通常 UTF-8)後傳遞,伺服器若用錯誤編碼解碼(如 ISO-8859-1)即產生亂碼。Tomcat 8+ 默認 UTF-8,但代理、負載均衡器可能改變編碼。

前端雙重編碼

// JavaScript
var url = "xxx.do?name=" + encodeURI(encodeURI("名字")) + "&age=" + encodeURI(encodeURI("十八歲"));

encodeURI 保留 URL 結構字符,雙重編碼抵消中間節點可能的單次解碼。

後端統一解碼

// Java Servlet/Controller
String jsonStr = request.getParameter("param");
String decoded = java.net.URLDecoder.decode(jsonStr, StandardCharsets.UTF_8.name());

系統級配置建議

  • Tomcat server.xml:<Connector URIEncoding="UTF-8" useBodyEncodingForURI="true"/>
  • Spring Boot:server.tomcat.uri-encoding=UTF-8
  • Filter 統一處理:request.setCharacterEncoding("UTF-8")

完整鏈路最佳實踐

  1. 頁面聲明 <meta charset="UTF-8">
  2. JS 使用 encodeURIComponent(針對參數值)雙重編碼
  3. 後端統一 UTF-8 解碼
  4. 數據庫連接串加 characterEncoding=utf8
  5. 日誌、控制台輸出驗證無亂碼
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved