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());
server.xml:<Connector URIEncoding="UTF-8" useBodyEncodingForURI="true"/>server.tomcat.uri-encoding=UTF-8request.setCharacterEncoding("UTF-8")<meta charset="UTF-8">encodeURIComponent(針對參數值)雙重編碼UTF-8 解碼characterEncoding=utf8