新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Unicode編碼介紹

        Unicode編碼介紹

        作者: 時間:2011-04-23 來源:網絡 收藏

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

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

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

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

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

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

        總之當時處理中文是很痛苦的。而更痛苦的是GB2312是國家標準,臺灣當時有一個Big5編碼標準,很多編碼和GB是相同的,所以……,嘿嘿。

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

        于是,誕生了。

        有兩套標準,一套叫UCS-2(-16),用2個字節為字符編碼,另一套叫UCS-4(Unicode-32),用4個字節為字符編碼。

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

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

        在Unicode里,所有的字符被一視同仁。漢字不再使用“兩個擴展ASCII”,而是使用“1個Unicode”,注意,現在的漢字是“一個字符”了,于是,拆字、統計字數這些問題也就自然而然的解決了。

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

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

        另一個更加嚴重的問題是,C語言使用'

        主站蜘蛛池模板: 区。| 武穴市| 玛沁县| 昆明市| 宁都县| 肃宁县| 呼玛县| 九龙坡区| 巴林右旗| 林州市| 道孚县| 屏东市| 平乡县| 体育| 阳泉市| 运城市| 沽源县| 灵丘县| 孟村| 盐池县| 罗定市| 湖口县| 凤山市| 郓城县| 双峰县| 昭觉县| 宁都县| 镇坪县| 柘荣县| 志丹县| 孝昌县| 札达县| 伊金霍洛旗| 文成县| 蓬溪县| 宁夏| 高邮市| 临湘市| 咸阳市| 宝坻区| 巨鹿县|