Wednesday, December 5, 2012

Tomcat與UTF-8編碼

由於Tomcat預設的編碼為ISO-8859-1,所以當使用Tomcat架設JSP與Mysql資料庫時,便要注意中文編碼的問題。最好的方法就是把Tomcat、web與Mysql全部的編碼一律設定為UTF-8,下面將說明如何將Tomcat的編碼處理設定為UTF-8。

1. GET請求部份
Tomcat使用ISO-8859-1編碼作為預設的URL編碼,所以當web發出夾帶中文訊息的get請求時,資料就會變成亂碼。

解決方法是修改\Tomcat\conf\server.xml檔案,找到Connector標籤,加入URIEncoding="UTF-8"即可。
<Connector port="8080" protocol="HTTP/1.1"
 URIEncoding="UTF-8"
 connectionTimeout="20000"
 redirectPort="8443" />

2. POST請求部份
Tomcat提供了一個名為SetCharacterEncodingFilter.class的filter,可以將POST請求改為UTF-8編碼

Tomcat 6.x版本:

webapps/examples/WEB-INF/classes/filters/SetCharacterEncodingFilter.class
複製到你的webapp資料夾中
yourwebapp/WEB-INF/classes/filters/SetCharacterEncodingFilter.class
並在web.xml設定filter
<filter>
 <filter-name>Set Character Encoding</filter-name>
 <filter-class>filters.SetCharacterEncodingFilter</filter-class>
 <init-param>
  <param-name>encoding</param-name>
  <param-value>UTF-8</param-value>
 </init-param>
</filter>

<filter-mapping>
 <filter-name>Set Character Encoding</filter-name>
 <!--將全部的請求都mapping給filter-->
 <url-pattern>/*</url-pattern>
</filter-mapping>

Tomcat 7.x以及5.5.36、6.0.36之後的版本:
在Tomcat 7.x以及5.5.36、6.0.36之後的版本中,已經將SetCharacterEncodingFilter加入Tomcat核心中,因此不需要再自行複製class到自己的webapp資料夾中,在設定filter時直接指定class即可。
<filter>
 <filter-name>Set Character Encoding</filter-name>
 <!--差異處-->
 <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
 <init-param>
  <param-name>encoding</param-name>
  <param-value>UTF-8</param-value>
 </init-param>
</filter>

<filter-mapping>
 <filter-name>Set Character Encoding</filter-name>
 <!--將全部的請求都mapping給filter-->
 <url-pattern>/*</url-pattern>
</filter-mapping>

Reference:



No comments:

Post a Comment