lqxue

          常用鏈接

          統(tǒng)計(jì)

          book

          tools

          最新評(píng)論

          java 編碼研究感想

          1、iso8859-1
          屬于單字節(jié)編碼,最多能表示的字符范圍是0-255,應(yīng)用于英文系列。比如,字母'a'的編碼為0x61=97。
          很明顯,iso8859-1編碼表示的字符范圍很窄,無(wú)法表示中文字符。但是,由于是單字節(jié)編碼,和計(jì)算機(jī)最基礎(chǔ)的表示單位一致,所以很多時(shí)候,仍舊使用 iso8859-1編碼來(lái)表示。而且在很多協(xié)議上,默認(rèn)使用該編碼。比如,雖然"中文"兩個(gè)字不存在iso8859-1編碼,以gb2312編碼為例,應(yīng) 該是"[u]d6d0 cec4[/u]"兩個(gè)字符,使用iso8859-1編碼的時(shí)候則將它拆開(kāi)為4個(gè)字節(jié)來(lái)表示:"[u]d6 d0 ce c4[/u]"(事實(shí)上,在進(jìn)行存儲(chǔ)的時(shí)候,也是以字節(jié)為單位處理的)。而如果是UTF編碼,則是6個(gè)字節(jié)"[u]e4 b8 ad e6 96 87[/u]"。很明顯,這種表示方法還需要以另一種編碼為基礎(chǔ)。
          2、 GB2312/GBK
          這就是漢子的國(guó)標(biāo)碼,專(zhuān)門(mén)用來(lái)表示漢字,是雙字節(jié)編碼,而英文字母和iso8859-1一致(兼容iso8859-1編碼)。其中g(shù)bk編碼能夠用來(lái)同時(shí)表示繁體字和簡(jiǎn)體字,而gb2312只能表示簡(jiǎn)體字,gbk是兼容gb2312編碼的。
          3、 unicode
          這是最統(tǒng)一的編碼,可以用來(lái)表示所有語(yǔ)言的字符,而且是定長(zhǎng)雙字節(jié)(也有四字節(jié)的)編碼,包括英文字母在內(nèi)。所以可以說(shuō)它是不兼容iso8859-1編碼 的,也不兼容任何編碼。不過(guò),相對(duì)于iso8859-1編碼來(lái)說(shuō),uniocode編碼只是在前面增加了一個(gè)0字節(jié),比如字母'a'為"[u]00 61[/u]"。
          需要說(shuō)明的是,定長(zhǎng)編碼便于計(jì)算機(jī)處理(注意GB2312/GBK不是定長(zhǎng)編碼),而unicode又可以用來(lái)表示所有字符,所以在很多軟件內(nèi)部是使用unicode編碼來(lái)處理的,比如java。
          4、UTF
          考慮到unicode編碼不兼容iso8859-1編碼,而且容易占用更多的空間:因?yàn)閷?duì)于英文字母,unicode也需要兩個(gè)字節(jié)來(lái)表示。所以 unicode不便于傳輸和存儲(chǔ)。因此而產(chǎn)生了utf編碼,utf編碼兼容iso8859-1編碼,同時(shí)也可以用來(lái)表示所有語(yǔ)言的字符,不過(guò),utf編碼 是不定長(zhǎng)編碼,每一個(gè)字符的長(zhǎng)度從1-6個(gè)字節(jié)不等。另外,utf編碼自帶簡(jiǎn)單的校驗(yàn)功能。一般來(lái)講,英文字母都是用一個(gè)字節(jié)表示,而漢字使用三個(gè)字節(jié)。
          注意,雖然說(shuō)utf是為了使用更少的空間而使用的,但那只是相對(duì)于unicode編碼來(lái)說(shuō),如果已經(jīng)知道是漢字,則使用GB2312/GBK無(wú)疑是最節(jié)省 的。不過(guò)另一方面,值得說(shuō)明的是,雖然utf編碼對(duì)漢字使用3個(gè)字節(jié),但即使對(duì)于漢字網(wǎng)頁(yè),utf編碼也會(huì)比unicode編碼節(jié)省,因?yàn)榫W(wǎng)頁(yè)中包含了很 多的英文字符。
          5、如果我們以一種能表示中文的編碼格式(例如GBK、unicode)來(lái)保存中文到文件中,那么當(dāng)我們用properties load時(shí),只要load時(shí)的編碼格式(默認(rèn)8859-1)和你保存的文件的編碼格式相同,那么就不會(huì)出現(xiàn)亂碼。
          6、之所以\u4F60這種形式支持國(guó)際化,是因?yàn)檫@種形式的內(nèi)容無(wú)論那種編碼都是支持的,當(dāng)我們用properties.getProperty()時(shí),這個(gè)方法會(huì)對(duì)key和value都進(jìn)行轉(zhuǎn)化一次,當(dāng)其碰見(jiàn)這種碼時(shí),它就把他轉(zhuǎn)化為unicode碼后返回。 所以,我們可以利用工具(例如:native2ascii )把.properties文件轉(zhuǎn)化成這種格式以方便我們支持國(guó)際化。

          參考鏈接:
              1、http://www.aygfsteel.com/beike/archive/2006/04/29/44038.html
              2、http://tech.ccidnet.com/art/1077/20050704/279619_1.html
              3、http://linux.chinaunix.net/bbs/archiver/tid-896583.html

          posted on 2007-05-29 13:37 lqx 閱讀(190) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 亳州市| 茌平县| 兰西县| 上栗县| 库车县| 郯城县| 息烽县| 砚山县| 白玉县| 陆河县| 城口县| 龙山县| 禹城市| 武乡县| 甘谷县| 万安县| 长子县| 成都市| 长岭县| 白水县| 微山县| 库尔勒市| 辽中县| 安顺市| 澜沧| 南昌市| 惠水县| 合作市| 北票市| 常州市| 布拖县| 安宁市| 巴南区| 镇康县| 凤凰县| 秭归县| 东方市| 安仁县| 彝良县| 漯河市| 苏尼特右旗|