Unicode解決方案
Unicode:寬字節(jié)字符集(摘自windows核心編程)
Unicode是Apple和Xerox公司于1988年建立的一個(gè)技術(shù)標(biāo)準(zhǔn)。1991年,成立了一個(gè)集團(tuán)機(jī)構(gòu)負(fù)責(zé)Unicode的開(kāi)發(fā)和推廣應(yīng)用。該集團(tuán)由Apple、Compaq、IBM、Microsoft、Oracle、Silicon ? Graphics, ? Inc.、Sybase、Unisys和Xerox等公司組成。該集團(tuán)負(fù)責(zé)維護(hù)Unicode標(biāo)準(zhǔn)。
Unicode提供了一種簡(jiǎn)單而又一致的表示字符串的方法。Unicode字符串中的所有字符都是16位的(兩個(gè)字節(jié))。它沒(méi)有專門(mén)的字節(jié)來(lái)指明下一個(gè)字節(jié)是屬于同一個(gè)字符的組成部分,還是一個(gè)新字符。這意味著你只需要對(duì)指針進(jìn)行遞增或遞減,就可以遍歷字符串中的各個(gè)字符,不再需要調(diào)用CharNext之類的函數(shù)。由于Unicode用一個(gè)16位的值來(lái)表示每個(gè)字符,因此總共可以得到65000個(gè)字符,這樣,它就能夠?qū)κ澜绺鲊?guó)的書(shū)面文字中的所有字符進(jìn)行編碼,遠(yuǎn)遠(yuǎn)超過(guò)了單字節(jié)字符集的256個(gè)字符的數(shù)目。
我們面臨的基本問(wèn)題是世界上的書(shū)寫(xiě)語(yǔ)言不能簡(jiǎn)單地用256個(gè)8位代碼表示。以前的解決方案包括代碼頁(yè)和DBCS已被證明是不能滿足需要的,而且也是笨拙的。那什么才是真正的解決方案呢?
身為程序編寫(xiě)者,我們經(jīng)歷過(guò)這類問(wèn)題。如果事情太多,用8位數(shù)值已經(jīng)不能表示,那么我們就試更寬的值,例如16位值。而且這很有趣的,正是Unicode被制定的原因。與混亂的256個(gè)字符代碼映像,以及含有一些1字節(jié)代碼和一些2字節(jié)代碼的雙字節(jié)字符集不同,Unicode是統(tǒng)一的16位系統(tǒng),這樣就允許表示65,536個(gè)字符。這對(duì)表示所有字符及世界上使用象形文字的語(yǔ)言,包括一系列的數(shù)學(xué)、符號(hào)和貨幣單位符號(hào)的集合來(lái)說(shuō)是充裕的。
明白Unicode和DBCS之間的區(qū)別很重要。Unicode使用(特別在C程序設(shè)計(jì)語(yǔ)言環(huán)境里)“寬字符集”。“Unicode中的每個(gè)字符都是16位寬而不是8位寬。”在Unicode中,沒(méi)有單單使用8位數(shù)值的意義存在。相比之下,在雙字節(jié)字符集中我們?nèi)匀惶幚?位數(shù)值。有些字節(jié)自身定義字符,而某些字節(jié)則顯示需要和另一個(gè)字節(jié)共同定義一個(gè)字符。
處理DBCS字符串非常雜亂,但是處理Unicode文字則像處理有秩序的文字。您也許會(huì)高興地知道前128個(gè)Unicode字符(16位代碼從0x0000到0x007F)就是ASCII字符,而接下來(lái)的128個(gè)Unicode字符(代碼從0x0080到0x00FF)是ISO ? 8859-1對(duì)ASCII的擴(kuò)展。Unicode中不同部分的字符都同樣基于現(xiàn)有的標(biāo)準(zhǔn)。這是為了便于轉(zhuǎn)換。希臘字母表使用從0x0370到0x03FF的代碼,斯拉夫語(yǔ)使用從0x0400到0x04FF的代碼,美國(guó)使用從0x0530到0x058F的代碼,希伯來(lái)語(yǔ)使用從0x0590到0x05FF的代碼。中國(guó)、日本和韓國(guó)的象形文字(總稱為CJK)占用了從0x3000到0x9FFF的代碼。
Unicode的最大好處是這里只有一個(gè)字符集,沒(méi)有一點(diǎn)含糊。Unicode實(shí)際上是個(gè)人計(jì)算機(jī)行業(yè)中幾乎每個(gè)重要公司共同合作的結(jié)果,并且它與ISO ? 10646-1標(biāo)準(zhǔn)中的代碼是一一對(duì)應(yīng)的。Unicode的重要參考文獻(xiàn)是《The ? Unicode ? Standard,Version ? 2.0》(Addison-Wesley出版社,1996年)。這是一本特別的書(shū),它以其它文件少有的方式顯示了世界上書(shū)寫(xiě)語(yǔ)言的豐富性和多樣性。此外,該書(shū)還提供了開(kāi)發(fā)Unicode的基本原理和細(xì)節(jié)。
Unicode有缺點(diǎn)嗎?當(dāng)然有。Unicode字符串占用的內(nèi)存是ASCII字符串的兩倍。(然而壓縮文件有助于極大地減少文件所占的磁盤(pán)空間。)但也許最糟的缺點(diǎn)是:人們相對(duì)來(lái)說(shuō)還不習(xí)慣使用Unicode。身為程序編寫(xiě)者,這就是我們的工作
posted on 2006-03-27 17:49
xnabx 閱讀(149)
評(píng)論(0) 編輯 收藏