服務器按順序決定響應編碼:
response.setCharacterEncoding()(最高)response.setContentType("text/html;charset=UTF-8")pageEncoding="UTF-8"(JSP 頁面指令,最低)在接收頁面**讀取參數前**調用:
request.setCharacterEncoding("UTF-8"); // 必須與生成表單頁的 response 編碼一致
原理:Tomcat 默認用 ISO-8859-1 解碼 POST 體,setCharacterEncoding 覆蓋該行為。
request.setCharacterEncoding() **無效**(Tomcat 5.0+ 默認不使用它解碼 URL)。
兩種解決方案(在 server.xml <Connector> 中配置):
| 屬性 | 作用 | 建議值 |
|---|---|---|
URIEncoding | 統一指定所有 GET 請求解碼編碼 | UTF-8 |
useBodyEncodingForURI | 啟用後,GET 解碼沿用 request.setCharacterEncoding 值 | true(Tomcat 4.0 默認 true,5.0+ 默認 false) |
區別:URIEncoding 全局統一;useBodyEncodingForURI 允許不同頁面用不同編碼。
pageEncoding="UTF-8"、response.setContentType("text/html;charset=UTF-8")。request.setCharacterEncoding("UTF-8")。server.xml 設置 URIEncoding="UTF-8" 徹底解決 GET 亂碼。characterEncoding=utf8(MySQL)或 useUnicode=true。