jsp編碼討論

2021-04-01 17:04:13 字數 1127 閱讀 3616

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

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

Jsp字元編碼

參考 乙個jsp檔案如下 servlet text 中文 body html utf 8 決定了jsp編譯成servlet時所使用的編碼,比如 中文 兩個字將以utf 8的形式儲存。但是如果jsp文字檔案本身不是utf 8格式的,那麼編譯時就已經產生編碼不一致的現象,因此無論怎樣客戶端顯示的都是亂碼...

JSP的編碼問題

真是太奇怪了。今天做jsp的作業的時候,從資料庫取出來的中文直接set到session裡的話,再取出來竟然變成了亂碼。問老師,老師竟說這是正常的。說有些時候,jsp放資料到session裡會亂碼,而有些時候,又不會亂碼。會不會亂碼,存在不確定性。這太鬱悶了!老師說,遇到這種問題的時候,需要把字串的編...

oracle 編碼問題 討論解決

al32utf8和utf8字符集有什麼區別和聯絡?al32utf8 支援更高版本的unicode 3.1 而且,al32utf8只支援9i以及更高版本的資料庫 utf8既可以作為資料庫字符集,也可以作為國家字符集 9i al32utf8只能作為資料庫字符集 oracle 客戶端執行select fr...