j2ee 中文 編碼

          Posted on 2006-04-05 18:59 英雄 閱讀(391) 評(píng)論(0)  編輯  收藏 所屬分類: java積累

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

          ?

          主站蜘蛛池模板: 天长市| 黄山市| 临清市| 册亨县| 井冈山市| 平阳县| 长葛市| 玛沁县| 东乌珠穆沁旗| 夏邑县| 汕头市| 北碚区| 南丹县| 巴林右旗| 鄂托克前旗| 即墨市| 敖汉旗| 鹤岗市| 逊克县| 石台县| 太原市| 蒲城县| 金堂县| 永州市| 娄烦县| 扶沟县| 鸡泽县| 体育| 子长县| 太谷县| 郯城县| 永昌县| 桐乡市| 綦江县| 靖宇县| 大余县| 澄江县| 石屏县| 尼玛县| 澎湖县| 阿克苏市|