• yam天空
  • 天空部落
  • 新聞
  • 登入 註冊 網誌隨便逛
  • 加入天空部落
  • 聽不見我愛你活動

網誌 相簿 影音 PK吧! Honda嬉遊趣
即時新聞 影音新聞 新聞專輯 政治新聞 財經新聞 娛樂新聞 運動新聞 兩岸新聞 科技新聞
管理介面 發表網誌 發表日記 上傳相片 上傳影音 管理留言
推薦這個部落格: 73

※程式學習中※

能笑的時候就別哭,想哭的時候,別捨不得眼淚!

☆胡言亂語、雜七雜八的東西☆ | ☆內有惡犬,沒事別亂點☆ | ☆爛部落格!吐槽點這就對了☆
11/15 第二彈 - 碧潭、烏來 | 主頁 | 11/3 是什麼好日子啊?
November 4, 2008
中文亂碼總整理 (Tomcat 5.5)以文找文
carl44 在天空部落發表於18:19:36 | ㊣JSP
鼓勵此網誌:0 

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

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

Tomcat 5.x 中文亂碼問題 這篇裡面提到,把所有的編碼都設成 Big5,
這麼一來,也符合了「所有編碼都設為相同」的原則,
當然包括編輯器預設儲存編碼也是 Big5,如此網頁可以正確顯示中文字,
但是 ... 如果後端需要加上 MySQL 資料庫,
如何在表單跟 MySQL 之間正確傳遞中文,可能又會是一個花時間的問題,
可參考這篇,<轉載> 如何解決JSP及PHP存取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");
<轉載> 如何解決JSP及PHP存取MySQL中文亂碼的問題 的第 3, 4 點做法跟這篇提到的不太一樣,是因為第 1, 2 點已經把所有的編碼都改成 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)
留言 (0) | 引用 (0) | 人氣 () | 轉寄
此分類上一篇:Struts2 設置筆記 (Hello World 級^^) | 主頁 | 此分類下一篇:servlet compile error
引用 (你可以針對此文寫一篇屬於自己的blog/想法,並給作者一個通告)
引用
留言 (0筆)
發表你的留言 (字數限制 最多 2000 個中文字)
私密留言: 是 否
Name:





是 否
內容:
系統公告
我是誰
個人圖檔
ID:carl44
暱稱:黃小蛙
生日:1984/04/4
地區:臺北市
  • 訂閱 |
    • 我要訂閱此部落格的
    • 日記
    • 網誌
    • 相簿
  • 好友 |
    • 好友功能
    • 觀看好友列表
    • 觀看人緣列表
  • 人氣 |
  • 簡介 

卡豬
文章分類
  • ☆電腦資訊的☆ (12)
    • ㊣Mac (4)
    • ㊣Win (29)
    • ㊣PHP (5)
    • ㊣JSP (6)
    • ㊣ROR (1)
    • ㊣Java (5)
    • ㊣VoIP (9)
    • ㊣Game (2)
    • ㊣Linux (15)
    • ㊣Database (5)
    • ㊣JavaScript (4)
    • ㊣其他 (8)
  • ☆電腦以外的☆ (4)
    • ※E770 (8)
    • ※Lyrics (31)
    • ※Excerpts (9)
    • ※Other (19)
  • ☆日記☆ (4)
    • ♂Diary (195)
    • ♂Story (0)
    • ♂Field (5)
    • ♂Memo (0)
  • Temp (0)
標籤雲
書籤
  • Rinko
  • 玲
  • 如
  • 娟
  • 姊
  • 豆豆
  • Ken
  • 翰翰
  • -
  • 阿年
  • 安全
  • 小忠
  • -
  • mayla
  • 小木
  • 小麥
  • 嘎上
  • 企鵝
  • 小武
  • -
  • 1+
  • 阿宗
  • 家福
  • 嘉文
  • 文彥
  • 阿敦
  • -
  • 導遊
  • 重灌狂人
  • Engadget 癮科技
搜尋欄位
搜尋:
RSS 訂閱
RSS2
ATOM
贊助商
其它資訊
本部落所刊登之內容,皆由作者個人所提供,不代表 yam 天空 本身立場。
POWERED BY
POWERED BY 天空部落
會員登入│免費註冊