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

SSH 專案中 Action 接收到 GBK 亂碼的完整解決方案

     編輯:程式設計綜合問答

問題現象

Spring + Struts2 + Hibernate (SSH) 專案中,Action 接收到的中文參數為 GBK 編碼,導致亂碼。JSP 頁面、Java 檔案均為 UTF-8,配置過濾器仍無效。

三層編碼統一策略

  1. Spring CharacterEncodingFilter(最優先)
    在 web.xml 最前面配置:
    <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>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
  2. JSP 頁面指令
    每個 JSP 頁首添加:
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    
  3. Tomcat 連接器設定
    修改 server.xml 中的 Connector:
    <Connector port="8080" protocol="HTTP/1.1"
               URIEncoding="UTF-8" />
    

資料庫連線編碼

JDBC URL 附加參數:

jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Taipei

前端表單提交

<form action="..." method="post" accept-charset="UTF-8">

驗證清單

  • 瀏覽器 Network → Request Headers:Content-Type: application/x-www-form-urlencoded; charset=UTF-8
  • Action 中打印 request.getCharacterEncoding() 應為 UTF-8。
  • 資料庫欄位編碼為 utf8mb4。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved