網絡消費網 >  5G > > 正文
        Unicode編碼介紹
        時間:2021-11-28 06:22:05

        先從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的角度入手,也不能僅靠中國一家來解決。而必須有一個全新的編碼系統,這個系統要可以將中文、英文、法文、德文……等等所有的文字統一起來考慮,為每個文字都分配一個單獨的編碼,這樣才不會有上面那種現象出現。于是,Unicode誕生了。Unicode有兩套標準,一套叫UCS-2(Unicode-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語言使用""作為字符串結尾,而Unicode里恰恰有很多字符都有一個字節為0,這樣一來,C語言的字符串函數將無法正常處理Unicode,除非把世界上所有用C寫的程序以及他們所用的函數庫全部換掉。于是,比Unicode更偉大的東東誕生了,之所以說它更偉大是因為它讓Unicode不再存在于紙上,而是真實的存在于我們大家的電腦中。那就是:UTF。UTF=UCSTransformationFormatUCS轉換格式它是將Unicode編碼規則和計算機的實際編碼對應起來的一個規則。現在流行的UTF有2種:UTF-8和UTF-16。其中UTF-16和上面提到的Unicode本身的編碼規范是一致的,這里不多說了。而UTF-8不同,它定義了一種“區間規則”,這種規則可以和ASCII編碼保持最大程度的兼容。UTF-8有點類似于Haffman編碼,它將Unicode編碼為00000000-0000007F的字符,用單個字節來表示;00000080-000007FF的字符用兩個字節表示00000800-0000FFFF的字符用3字節表示因為目前為止Unicode-16規范沒有指定FFFF以上的字符,所以UTF-8最多是使用3個字節來表示一個字符。但理論上來說,UTF-8最多需要用6字節表示一個字符。在UTF-8里,英文字符仍然跟ASCII編碼一樣,因此原先的函數庫可以繼續使用。而中文的編碼范圍是在0080-07FF之間,因此是2個字節表示(但這兩個字節和GB編碼的兩個字節是不同的),用專門的Unicode處理類可以對UTF編碼進行處理。下面說說中文的問題。由于歷史的原因,在Unicode之前,一共存在過3套中文編碼標準。GB2312-80,是中國大陸使用的國家標準,其中一共編碼了6763個常用簡體漢字。Big5,是臺灣使用的編碼標準,編碼了臺灣使用的繁體漢字,大概有8千多個。HKSCS,是中國香港使用的編碼標準,字體也是繁體,但跟Big5有所不同。這3套編碼標準都采用了兩個擴展ASCII的方法,因此,幾套編碼互不兼容,而且編碼區間也各有不同因為其不兼容性,在同一個系統中同時顯示GB和Big5基本上是不可能的。當時的南極星、RichWin等等軟件,在自動識別中文編碼、自動顯示正確編碼方面都做了很多努力。他們用了怎樣的技術我就不得而知了,我知道好像南極星曾經以同屏顯示繁簡中文為賣點。后來,由于各方面的原因,國際上又制定了針對中文的統一字符集GBK和GB18030,其中GBK已經在Windows、Linux等多種操作系統中被實現。GBK兼容GB2312,并增加了大量不常用漢字,還加入了幾乎所有的Big5中的繁體漢字。但是GBK中的繁體漢字和Big5中的幾乎不兼容。GB18030相當于是GBK的超集,比GBK包含的字符更多。據我所知目前還沒有操作系統直接支持GB18030。談談Unicode編碼,簡要解釋UCS、UTF、BMP、BOM等名詞這是一篇程序員寫給程序員的趣味讀物。所謂趣味是指可以比較輕松地了解一些原來不清楚的概念,增進知識,類似于打RPG游戲的升級。整理這篇文章的動機是兩個問題:問題一:使用Windows記事本的“另存為”,可以在GBK、Unicode、Unicodebigendian和UTF-8這幾種編碼方式間相互轉換。同樣是txt文件,Windows是怎樣識別編碼方式的呢?我很早前就發現Unicode、Unicodebigendian和UTF-8編碼的txt文件的開頭會多出幾個字節,分別是FF、FE(Unicode),FE、FF(Unicodebigendian),EF、BB、BF(UTF-8)。但這些標記是基于什么標準呢?問題二:最近在網上看到一個ConvertUTF.c,實現了UTF-32、UTF-16和UTF-8這三種編碼方式的相互轉換。對于Unicode(UCS2)、GBK、UTF-8這些編碼方式,我原來就了解。但這個程序讓我有些糊涂,想不起來UTF-16和UCS2有什么關系。查了查相關資料,總算將這些問題弄清楚了,順帶也了解了一些Unicode的細節。寫成一篇文章,送給有過類似疑問的朋友。本文在寫作時盡量做到通俗易懂,但要求讀者知道什么是字節,什么是十六進制。

        關鍵詞: 介紹 編碼 Unicode

        版權聲明:
            凡注明來網絡消費網的作品,版權均屬網絡消費網所有,未經授權不得轉載、摘編或利用其它方式使用上述作品。已經本網授權使用作品的,應在授權范圍內使用,并注明"來源:網絡消費網"。違反上述聲明者,本網將追究其相關法律責任。
            除來源署名為網絡消費網稿件外,其他所轉載內容之原創性、真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考并自行核實。
        熱文

        網站首頁 |網站簡介 | 關于我們 | 廣告業務 | 投稿信箱
         

        Copyright © 2000-2020 www.fnsyft.com All Rights Reserved.
         

        中國網絡消費網 版權所有 未經書面授權 不得復制或建立鏡像
         

        聯系郵箱:920 891 263@qq.com

        備案號:京ICP備2022016840號-15

        營業執照公示信息

        亚洲日韩国产AV无码无码精品| 亚洲av最新在线网址| 国产亚洲AV无码AV男人的天堂| 老牛精品亚洲成av人片| 亚洲欧美日韩国产成人| 亚洲日韩精品国产一区二区三区| 亚洲国产成人久久| 亚洲精品国产福利在线观看| 91嫩草私人成人亚洲影院| 久久亚洲精品中文字幕| 噜噜噜亚洲色成人网站∨| 亚洲精品永久www忘忧草| 亚洲高清视频免费| 亚洲神级电影国语版| 亚洲性色高清完整版在线观看| 亚洲熟妇无码一区二区三区| 456亚洲人成在线播放网站| 亚洲jizzjizz在线播放久| 亚洲一区二区三区在线| 久久亚洲精品成人777大小说| 日本红怡院亚洲红怡院最新| 亚洲精品乱码久久久久66| 国产国拍亚洲精品mv在线观看| 久久亚洲国产中v天仙www| 久久精品国产亚洲AV麻豆王友容| 亚洲va在线va天堂va四虎| 亚洲精品在线观看视频| 亚洲视频日韩视频| 亚洲色欲色欲www| 亚洲日韩AV一区二区三区中文| 亚洲AV性色在线观看| 亚洲国产一区二区视频网站| 亚洲无码视频在线| 亚洲乱码无码永久不卡在线| 亚洲av日韩综合一区在线观看| 亚洲网址在线观看| 亚洲免费福利在线视频| 精品无码专区亚洲| 久久亚洲精品无码播放| 久久精品亚洲综合专区| 亚洲码在线中文在线观看|