在解決亂碼問題前,必須先搞清楚幾個相關的問題。
為每個jsp頁面設定了其編碼格式(utf-8),但傳遞資料到另一頁麵時依然顯示為亂碼?
首先要需要了解的是web容器預設編碼是iso-8859-1,乙個漢字占用兩個位元組,而在utf-8中乙個漢字占用三個位元組。所以在資料傳遞過程中,必須手動設定容器編碼格式,否則會出現字元位丟失的情況。即3個位元組變為兩個位元組,自然會變成亂碼。
為什麼儲存到資料庫中的資料都變成了亂碼?
原理同上,首先要搞清楚使用的資料庫預設的編碼格式,比如mysql預設的字元編碼是iso-8859-1。所以必須手動修改其預設編碼格式。
清楚了以上問題後,再來看如何解決utf-8的亂碼問題。
1.設定web容器的編碼格式。為你的servlet的doget或dopost方法開始處加入如下**:
request.setcharacterencoding("utf-8");
response.setcharacterencoding("utf-8");
2.為每個jsp頁面指定其編碼格式。<%@ page pageencoding="utf-8"%>
3.在連線資料庫用的url後加入:useunicode=true;characterencoding=utf-8 如:
url="jdbc:mysql:///db1?useunicode=true;characterencoding=utf-8",
4.為指定資料庫預設編碼格式。在c:\windows目錄下找到my.ini檔案,並在[mysqld]中加入default-character-set=gbk,重新啟動mysql服務。
至此,亂碼問題全部解決。起初總搞上去不清,為什麼要將mysql的預設編碼格式設定為gbk,後來由相關的資料得知utf-8預設輸入編碼方式為gbk,預設輸出編碼方式為utf-16be。
個人認為,將資料進行utf-8進行編碼的目的(即將中文編碼為%的形式),主要是為了在多層服務間進行資料傳輸時,防止發生字元丟失(如msn)。普通的web程式顯然沒有必要這樣做,只要使用以上方法進行處理,就可以有效的解決亂碼問題,從而結省儲存空間。如果都像公司的sc系統那樣,將乙個漢字編碼為18個字元後,再儲存到資料庫中,拋開效率不說,就儲存空間的浪費就夠人受的,要知道,那是需要銀子地!
網頁utf 8亂碼 utf8亂碼
複製 在前 在windows作業系統上使用ie作為瀏覽器時。常常會發生這樣的問題 在瀏覽使用utf 8編碼的網頁時,瀏覽器無法自動偵測 即沒有設定 自動選擇 編碼格式時 該頁面所用的編碼。即使網頁已經宣告過編碼格式 由此造成某些含有中文utf 8編碼的頁面產生空白輸出。由於utf 8為3個位元組表示...
utf 8亂碼解決方案
在解決亂碼問題前,必須先搞清楚幾個相關的問題。為每個jsp頁面設定了其編碼格式 utf 8 但傳遞資料到另一頁麵時依然顯示為亂碼?首先要需要了解的是web容器預設編碼是iso 8859 1,乙個漢字占用兩個位元組,而在utf 8中乙個漢字占用三個位元組。所以在資料傳遞過程中,必須手動設定容器編碼格式...
utf 8亂碼解決方案
在解決亂碼問題前,必須先搞清楚幾個相關的問題。為每個jsp頁面設定了其編碼格式 utf 8 但傳遞資料到另一頁麵時依然顯示為亂碼?首先要需要了解的是web容器預設編碼是iso 8859 1,乙個漢字占用兩個位元組,而在utf 8中乙個漢字占用三個位元組。所以在資料傳遞過程中,必須手動設定容器編碼格式...