Fork me on GitHub

Programming Design Notes

Spring Filter 強制將頁面轉成 UTF-8 編碼

| Comments

網頁亂碼的問題一直是一個非常困擾的問題,明明在自己的電腦測試時還好好的,當放上伺服器時又會出現亂碼。有時就算是網頁頁面使用了 UTF-8 編碼也不能解決問題,原因是伺服器後台程式輸出的文字不是以 UTF-8 編碼。要一一解決這些問題實在是非常浪費時間。

如果你有使用到 Spring Framework 的話,你可以試試使用 Spring Framework 內建的 Filter 去將頁面所有字串轉換成 UTF-8 編碼,以解決亂碼問題。我在 Google App Engine 上開發的應用程式也有亂碼問題,將頁面所有字串轉換成 UTF-8 編碼後便解決了所有亂碼問題。

首先在 web.xml 加上 Filter:
<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>

有一點要記的是 CharacterEncodingFilter 一定要是第一個 Filter。之後要加的 Filter 要加在下面。

所有 JSP 頁面亦要以 UTF-8 編碼,在 JSP 頁面加上以下程式碼:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

HTMLhead 亦要加上以下程式碼提示瀏覽器此頁面用 UTF-8 編碼。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

這樣就可以解決亂碼問題了。

相關書籍: Spring Recipes: A Problem-Solution ApproachSpring in ActionBeginning Java&trade; EE 6 Platform with GlassFish&trade; 3: From Novice to Professional