Posted on 2006-04-05 18:59
英雄 閱讀(385)
評論(0) 編輯 收藏 所屬分類:
java積累
1.編碼
? ASCII碼:128個碼位。
? iso8859-1:又稱為Latin-1 256個碼位。
? 從計算機的應用開始,我國已經頒布了多種中文信息編碼標準,
? 常用的是GB2312-1980,GB12345,GB13000(GBK),以及最新標準GB18030。向下兼容。
? 值得一提的是,最新的GB18030標準將要作為強制標準實行,所有不支持GB18030標準的軟件將不能作??? 為?產品出售。
? gb2312:[1~2個字節(jié)]
? 漢字:第一個字節(jié)的值在0xB0到0xF7之間,第二個字節(jié)的值在0xA0到0xFE之間。
? gb12345,gb13000:[1~2個字節(jié)]
? 漢字:大致為第一個字節(jié)的值在0x81到0xFE之間,第二個字節(jié)的值在0x40到0xFE之間。
? gb18030:[1~4個字節(jié)]
? 單字節(jié),其值從0到0x7F
? 雙字節(jié),第一個字節(jié)的值從0x81到0xFE,第二個字節(jié)的值從0x40到0xFE(不包括0x7F)
? 四字節(jié),第一個字節(jié)的值從0x81到0xFE,第二個字節(jié)的值從0x30到0x39,第三個字節(jié)的值從0x81到0xFE,第四個字節(jié)的值從0x30到0x39。
? unicode:
? UCS-2:[統(tǒng)一2個字節(jié)][現(xiàn)在用的unicode]65536個碼位。
? UCS-4:[統(tǒng)一4個字節(jié)]以防將來不夠用的2的31次方個 碼位。
? codepage:
? 各國編碼和unicode的對應表
? UTF編碼:
? UTF是“UCS Transformation Format”的縮寫。UTF-8 編碼字符理論上可以最多到 6 個字節(jié)長,可以編入? 所有可能的2的31次方個 UCS 代碼,是變字節(jié)編碼。
以上編碼統(tǒng)一兼容ascii.
2.j2ee中文問題解決
? 構架情景:
? 前臺顯示通過jsp,html;中間java的filter,servelt處理請求;后臺:java通過jdbc driver同數(shù)據(jù)庫交互。
? 基礎:
? 1]java運行總是以unicode為內存中存在形式。如:string s="中文";s在運行時內存是unicode編碼。
? 2]數(shù)據(jù)庫有一個存儲編碼集。表示了采用存儲的形式。如:表中記錄一個字段值為"中文",在數(shù)據(jù)庫中以該編碼集編碼存在。
? 3]html有一個網(wǎng)頁編碼,可以通過meta指定。
? 流程:
? 1)瀏覽器獲得的html總是來源于3個方面:
? 1,java直接輸出response,reponse.setContenttype指定編碼
? 2,jsp<content type指定編碼
? 3, html<meta指定編碼
? 前兩種在指定時都同時把生成的html數(shù)據(jù)按指定編碼編碼傳過來了[把內存unicode轉成對應編碼]。
? 后1種的實際編碼要看實際存儲的時候如何存儲的。
? 這樣瀏覽器按指定編碼把獲得的html解碼顯示出來。
? 2)瀏覽器發(fā)送數(shù)據(jù)時
? url根據(jù)ie設置可以總是以rtf-8發(fā)送,表單數(shù)據(jù)默認采用網(wǎng)頁編碼發(fā)送,當然也可以指定。
? 3)java接受數(shù)據(jù)后首先把url按iso-8859-1解析,得到request參數(shù)。然后可以通過在request.setEncod~來按指定編碼解析表單數(shù)據(jù)[編碼的unicode轉化],否則默認按iso-8859-1解析。
?? 4)java訪問數(shù)據(jù)庫通過jdbc driver。jdbc driver負責完成unicode和db默認編碼的轉化。
? 問題列舉:
? 如果傳遞的html含有中文,而編碼默認指定為iso-8859-1,出現(xiàn)亂碼
? 如果url中含有中文以rtf-8發(fā)送,java不處理會出現(xiàn)問題。
? 如果瀏覽器發(fā)送的form數(shù)據(jù)含有中文,而沒有通過對應編碼解析request,得到的參數(shù)會出現(xiàn)問題。
? 如果jdbc driver出現(xiàn)bug,比如mysql,會導致亂碼。
?
?
?
?
?
?
?
?
?