首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Servlet 中文亂碼問題的徹底解決方案

     編輯:程式設計疑難解答

現象:已設 response.setCharacterEncoding("UTF-8") 及 Header 仍亂碼

常見遺漏點:

  1. 請求端編碼:request.setCharacterEncoding("UTF-8") 必須在讀取參數(getParameter)之前調用。
  2. Tomcat 連接器配置:server.xml 中 <Connector URIEncoding="UTF-8" ... /> 確保 URL 參數正確解碼。
  3. JSP 頁面指令:<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>。
  4. 資料庫連線:JDBC URL 附加 ?characterEncoding=utf8(MySQL)或對應參數。
  5. 檔案存儲編碼:IDE 專案編碼、Java 檔案編碼均為 UTF-8。

統一配置最佳實踐

1. 過濾器統一設定請求/回應編碼

@WebFilter("/*")
public class EncodingFilter implements Filter {
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) {
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=UTF-8");
        chain.doFilter(req, resp);
    }
}

2. Spring MVC 專用

<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

徹底解決亂碼需「請求、處理、回應、存儲、傳輸」全鏈路 UTF-8。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved