JSP 頁面編碼、MySQL 表字符集均設為 UTF-8,但請求參數中文存入數據庫變亂碼,而代碼中寫死的字符串正常。
Tomcat 默認使用 ISO-8859-1 解碼請求參數。雖然頁面與數據庫一致,但 request.getParameter() 讀取時已按錯誤編碼解碼,導致字節序列損壞,後續轉碼無法恢復。
<%
// 必須在任何 getParameter() 之前調用
request.setCharacterEncoding("UTF-8");
String equipment = request.getParameter("chance_equipment");
String state = "未指派"; // 此處正常因為源文件已保存為 UTF-8
// ... 入庫邏輯
%>
<%@ page contentType="text/html;charset=UTF-8" %><meta charset="UTF-8">CharacterEncodingFilter 全局攔截,免去每個 JSP 重複設置。useUnicode=true&characterEncoding=utf8(MySQL 8.0+ 可省略)。CHARSET=utf8mb4(支持 Emoji)。