contentType="text/html; charset=UTF-8"Text file encoding = GBKrequest.getParameter("filename") 獲取中文文件名顯示 ????,控制台輸出亂碼。文件上傳涉及三層編碼轉換:
enctype="multipart/form-data" 時,瀏覽器按頁面 charset (UTF-8) 編碼文件名,放入請求體。URIEncoding="UTF-8" (Tomcat 8+ 默認 UTF-8) 並設置 request.setCharacterEncoding("UTF-8") **在讀取參數前**。String name = request.getParameter("filename") 獲取已解碼的 Unicode 字符串,後續寫入磁盤/數據庫需統一 UTF-8。<Connector port="8080" URIEncoding="UTF-8" />@WebFilter("/*")
public class EncodingFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) {
req.setCharacterEncoding("UTF-8");
res.setCharacterEncoding("UTF-8");
chain.doFilter(req, res);
}
}
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>Workspace > Text file encoding > Other > UTF-8 (徹底統一項目編碼)。@MultipartConfig,確保 request.setCharacterEncoding("UTF-8") 在 getPart() 前調用。String stored = UUID.randomUUID() + "." + ext;。original_name (VARCHAR, CHARSET utf8mb4)、stored_name、content_type、size。response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(originalName, "UTF-8") + "\"");new String(bytes, "ISO-8859-1") 手動轉碼 —— 容器已正確解碼,二次轉碼反而破壞。pageEncoding —— 導致 JSP 編譯時按系統默認編碼 (GBK) 讀取源文件,中文常量亂碼。字符編碼問題本質是「約定不一致」,建立「UTF-8 全棧」標準,配合元數據解耦存儲,是文件上傳的專業交付標準。