utf 8亂碼解決方案

2021-04-12 16:14:51 字數 1198 閱讀 9455

在解決亂碼問題前,必須先搞清楚幾個相關的問題。

為每個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個字元後,再儲存到資料庫中,拋開效率不說,就儲存空間的浪費就夠人受的,要知道,那是需要銀子地!

參考:http://publishblog.blogdriver.com/blog/tb.b?diaryid=283538

utf 8亂碼解決方案

在解決亂碼問題前,必須先搞清楚幾個相關的問題。為每個jsp頁面設定了其編碼格式 utf 8 但傳遞資料到另一頁麵時依然顯示為亂碼?首先要需要了解的是web容器預設編碼是iso 8859 1,乙個漢字占用兩個位元組,而在utf 8中乙個漢字占用三個位元組。所以在資料傳遞過程中,必須手動設定容器編碼格式...

UTF 8亂碼解決

在解決亂碼問題前,必須先搞清楚幾個相關的問題。為每個jsp頁面設定了其編碼格式 utf 8 但傳遞資料到另一頁麵時依然顯示為亂碼?首先要需要了解的是web容器預設編碼是iso 8859 1,乙個漢字占用兩個位元組,而在utf 8中乙個漢字占用三個位元組。所以在資料傳遞過程中,必須手動設定容器編碼格式...

python之UTF 8解決方案

比較徹底的方法使用python3。但是,直到目前,還更多使用python2.7的。只能參考下面的方法了。coding utf8 只要引入了中文字串,就立刻轉化,不用多慮。unicode str unicode 中文 encoding utf 8 另外,在進行列印或者寫入前用也進行一次utf 8編碼轉...