<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          Unicode編碼介紹

          作者: 時間:2011-04-23 來源:網(wǎng)絡(luò) 收藏

          先從ASCII說起。ASCII是用來表示英文字符的一種規(guī)范,每個ASCII字符占用1個字節(jié)(8bits)

          因此,ASCII可以表示的最大字符數(shù)是256,其實英文字符并沒有那么多,一般只用前128個(最高位為0),其中包括了控制字符、數(shù)字、大小寫字母和其他一些符號。

          而最高位為1的另128個字符被成為“擴(kuò)展ASCII”,一般用來存放英文的制表符、部分音標(biāo)字符等等的一些其他符號

          這種字符規(guī)范顯然用來處理英文沒有什么問題。(實際上也可以用來處理法文、德文等一些其他的西歐字符,但是不能和英文通用),但是面對中文、阿拉伯文之類復(fù)雜的文字,255個字符顯然不夠用

          于是,各個國家紛紛制定了自己的文字編碼規(guī)范,其中中文的文字編碼規(guī)范叫做“GB2312-80”,它是和ASCII兼容的一種編碼規(guī)范,其實就是利用擴(kuò)展ASCII沒有真正標(biāo)準(zhǔn)化這一點,把一個中文字符用兩個擴(kuò)展ASCII字符來表示。

          但是這個方法有問題,最大的問題就是,中文文字沒有真正屬于自己的編碼,因為擴(kuò)展ASCII碼雖然沒有真正的標(biāo)準(zhǔn)化,但是PC里的ASCII碼還是有一個事實標(biāo)準(zhǔn)的(存放著英文制表符),所以很多軟件利用這些符號來畫表格。這樣的軟件用到中文系統(tǒng)中,這些表格符就會被誤認(rèn)作中文字,破壞版面。而且,統(tǒng)計中英文混合字符串中的字?jǐn)?shù),也是比較復(fù)雜的,我們必須判斷一個ASCII碼是否擴(kuò)展,以及它的下一個ASCII是否擴(kuò)展,然后才“猜”那可能是一個中文字。

          總之當(dāng)時處理中文是很痛苦的。而更痛苦的是GB2312是國家標(biāo)準(zhǔn),臺灣當(dāng)時有一個Big5編碼標(biāo)準(zhǔn),很多編碼和GB是相同的,所以……,嘿嘿。

          這時候,我們就知道,要真正解決中文問題,不能從擴(kuò)展ASCII的角度入手,也不能僅靠中國一家來解決。而必須有一個全新的編碼系統(tǒng),這個系統(tǒng)要可以將中文、英文、法文、德文……等等所有的文字統(tǒng)一起來考慮,為每個文字都分配一個單獨的編碼,這樣才不會有上面那種現(xiàn)象出現(xiàn)。

          于是,誕生了。

          有兩套標(biāo)準(zhǔn),一套叫UCS-2(-16),用2個字節(jié)為字符編碼,另一套叫UCS-4(Unicode-32),用4個字節(jié)為字符編碼。

          以目前常用的UCS-2為例,它可以表示的字符數(shù)為2^16=65535,基本上可以容納所有的歐美字符和絕大部分的亞洲字符。

          UTF-8的問題后面會提到。

          在Unicode里,所有的字符被一視同仁。漢字不再使用“兩個擴(kuò)展ASCII”,而是使用“1個Unicode”,注意,現(xiàn)在的漢字是“一個字符”了,于是,拆字、統(tǒng)計字?jǐn)?shù)這些問題也就自然而然的解決了。

          但是,這個世界不是理想的,不可能在一夜之間所有的系統(tǒng)都使用Unicode來處理字符,所以Unicode在誕生之日,就必須考慮一個嚴(yán)峻的問題:和ASCII字符集之間的不兼容問題。

          我們知道,ASCII字符是單個字節(jié)的,比如“A”的ASCII是65。而Unicode是雙字節(jié)的,比如“A”的Unicode是0065,這就造成了一個非常大的問題:以前處理ASCII的那套機(jī)制不能被用來處理Unicode了。

          另一個更加嚴(yán)重的問題是,C語言使用'看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();