2012年2月14日

使用 CharacterEncodingFilter 解決 Java Web 的編碼問題

中文編碼在 Java Web 開發經常會碰到問題,所以這些設定很常見:

JSP:
contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"

Tomcat:
URIEncoding="UTF-8"

JAVA_OPT:
-Djavax.servlet.request.encoding=UTF-8 -Dfile.encoding=UTF-8

但即使有以上的設定,在 request.getParameter 取表單資料仍可能發生亂碼情況;網路上可以找到使用 getBytes 進行轉碼的寫法,但是在每次取值時才處理轉碼,會讓程式碼很不容易維護,例如將 Tomcat 改成 Jetty 時,可能就有不同處理方式(Jetty 預設為 UTF-8,通常不需要轉碼);

所以,最好的方法就是利用 Filter 進行統一的轉碼處理。

針對這個問題,我們建議使用 Spring Framework 的 CharacterEncodingFilter 解決問題。

這個 Filter 由 spring-web.jar 提供,若採用 Gradle 建置專案,只需要加入一行 dependencies 設定:

runtime 'org.springframework:spring-web:2.5.6'

若採用 Grails 開發 Java Web,則不必略過此問題,因為 Grails 內建的設定就已採用 CharacterEncodingFilter 處理編碼。

開啟這個 Filter,需要在 web.xml 加入:

沒有留言:

張貼留言

lyhcode by lyhcode
歡迎轉載,請務必註明出處!