之前舊的部落格發過幾篇解決 Tomcat 中文亂碼問題的文章,確實是解決了一些中文顯示的問題,但今天在 Struts2 時,又再度遇到中文亂碼的問題,所以想把幾個可能忽略的步驟記錄下來。

其實解決中文亂碼,只要把所有的編碼格式都調整成一致,比如說,編輯器預設儲存編碼為 Big5,卻把頁面設定成 <%@ page contentType=”text/html; charset=utf-8″ %>,這樣一來,在瀏覽器開啟的網頁,中文就會是亂碼。(反過來也會是亂碼)。唯有兩者設定都是相同編碼的時候,在網頁上才能正確顯示中文。

上面提到,把所有的編碼都設成 Big5,這麼一來,也符合了「所有編碼都設為相同」的原則,當然包括編輯器預設儲存編碼也是 Big5,如此網頁可以正確顯示中文字,但是 … 如果後端需要加上 MySQL 資料庫,如何在表單跟 MySQL 之間正確傳遞中文,可能又會是一個花時間的問題,經過幾番折騰之後,決定把所有的編碼都設定為 utf-8 比較方便。

  1. 編輯器預設儲存編碼 => 設定成 UTF-8
    以 EditPlus3 為例,可從「工具」->「偏好項」->「檔案」->「預設編碼模式」改成 UTF-8,
    注意之前可能存成 Big5 的,可以按另存新檔後,最下面編碼模式可以改變。
  2. 每個 JSP 頁面 charset 設定成 UTF-8
    e.g. <%@ page contentType=”text/html; charset=utf-8″ %>
  3. MySQL my.ini 設定成
    [client]
    default-character-set=utf8
    [mysqld]
    default-character-set=utf8
  4. 資料庫、資料表及欄位的 character-set 設為 utf8,collation(校對)設定為utf8_unicode_ci。
  5. 資料庫連結部份改成
    Connection con=DriverManager.getConnection(“jdbc:mysql://localhost/user?useUnicode=true&characterEncoding=utf8“, “帳號”, “密碼”);
  6. Servlet 部份同樣把 charset 設定成 UTF-8
    e.g. request.setContentType(“text/html; charset=utf-8”);
  7. GET 亂碼解決 => 在 %TOMCAT_HOME%\conf\server.xml 中,找到 <connector port=”8080″ … 部分,加上 URIEncoding = “UTF-8”,重啟 Tomcat。
  8. POST 亂碼解決 => 若是有多個網站,將 %TOMCAT_HOME%\webapps\jsp-examples\WEB-INF\classes\filters\SetCharacterEncodingFilter.class 複製到%TOMCAT_HOME%\shared\classes\filters 下,(若沒有資料夾可以自己新增),修改 %TOMCAT_HOME%\webapps\(mytest)\WEB-INF\web.xml (mytest 為網站目錄),加上以下內容

    <filter>
      <filter-name>SetCharacterEncoding</filter-name>
      <filter-class>filters.SetCharacterEncodingFilter</filter-class>
      <init-param>
        <param-name>encoding</param-name>
        <param-value>Big5</param-value>
      </init-param>
      </filter>
      <filter-mapping>
        <filter-name>SetCharacterEncoding</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>

    若有多個網站,就修改每個網站下的 WEB-INF\web.xml 檔案,完成後,重啟湯姆貓。

照著這些步驟做,應該就能有個能正確顯示中文的平台(或許吧!至少小蛙現在的環境就是)如果發現什麼問題,再隨時補上。

2009/07/31 補充:
在使用 Prototype.js 的 Updater / Requester function 時,編碼為 big5 傳遞中文會發生亂碼,
PHP 的解決方式 -> header(“Content-Type:text/html;charset=BIG5”);
JSP 解決方式 ->  response.setHeader(“Charset”,”BIG5″); 
這裡 AJAX 的傳遞方式要用 get
(參考資料: Real-Blog)

相關文章

Solr 教學 (2) – tomcat 7 以帳號密碼限制存取頁面

接續 Solr 教學 (1) – 安
2013-10-14 22:34:34
hans

18

tomcat 下載檔案卻直接亂碼開啟 at IE 10

上星期五接到一張 ticket 內容大概是網站上提供下載 .msi 的安裝檔案,在經過測試後大部分瀏覽器都可以正常下載檔案,唯獨漏掉測試的 IE 10 會出現問題,IE 10 會把 .msi 檔案當作文字檔一般開啟,在頁面上印出一堆亂碼,簡
2013-09-02 20:37:48
hans

18

SSL For Free – 免費又有綠色鎖頭的 SSL Certificates

之前聽說 Google 會優先搜尋有 https 的網頁 (參考:
2016-07-07 23:00:54
hans

8

Android Vuforia with jPCT-AE (5) – 多重模型載入,以 obj 為例

要進到這系列最後一篇文章了,這篇文章拖了很久,一直沒有時間整理,結果到最後 ... 程式碼留下來了,記憶卻有些模糊了,這邊小蛙配著程式碼盡可能的把還記得的東西寫下來。
2016-07-06 11:24:19
hans

8

Android Vuforia with jPCT-AE (3) – 載入 md2 測試

前兩篇介紹如何直接透過 jPCT-AE 直接繪圖以及載入 .obj 檔案,這邊繼續介紹 jPCT-AE 載入 md2 的方法,載入動作大致上類似,唯一不同的只有 texture 設定部份。
2016-07-06 09:24:43
hans

8

Android Vuforia with jPCT-AE (2) – 載入 obj 測試

上一篇 Android Vuforia with jPCT-AE (1) –
2016-07-06 08:24:55
hans

8

ClickForce (MobiForce) 當機問題

這真是個浪費時間又漫長的過程,CF 推出新版後台以及新版 SDK 的時候,小蛙就下載來測試,一開始小蛙直接套在「我的股票精算師」上,但只要一套上去就當機 ...
2015-09-02 10:32:51
hans

8

我的股票精算師備份功能

常遇到使用者詢問「我的股票精算師」要怎麼備份,這篇記錄一下,需要寫怎麼備份表示軟體設計上有很大的問題,造成使用者使用上的困難,但小蛙最近沒有時間去做修改 ... 只好委屈精算師的使用者了 ><
2015-02-06 18:32:07
hans

8

第一次從淘寶買小米盒子3

最近阿咕有在大螢幕上看韓劇的需求,剛好搭上 Chromecast 的上市,survey 了一些 Android 電視棒。這篇記錄這幾天的經過。

2015-01-04 23:36:33
hans

8




 回覆

你可以使用以下語法 HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="">

(required)

(required)

   
© 2012 蛙齋 Suffusion theme by Sayontan Sinha