從ASCII編碼到UNICODE編碼

       計算機產生之初,在美國,使用8個二進制數,即一個字節去表示字符就足夠了,編碼0-9,A-Z,a-z,一些特殊的符號,128個完全夠用,這就是最初的ASCII編碼,爲了編碼一些特殊的圖形,以及一些外國語言,還要用到剩下的128個編碼,這就是擴展ASCII;後來慢慢地計算機走向全世界,發現這樣子編碼是完全不夠的,比如我們國家的漢字,遠遠超過了256個,這時候就想到了用兩個字節去編碼,共有2^16=66536種情況,但是相應的也就有了問題,原來的ASCII碼怎麼處理,不能說你編了漢字之後,原來的英文字符就不能用了,所以解決辦法是用高字節用0xA1-0xF7,低字節用0xA1-0xFE來表示一個漢字,原來0-127編碼的英文字符照樣用,再後來發現還不夠,就乾脆對於低字節的部分不限制,當讀到在高字節範圍內的編碼,就認爲下一個字節是低字節的編碼,這就是最初的GBK,國標碼,這是屬於雙字節編碼的(DBCS),但是這也就出現了問題,就是統一的問題,就拿漢字來說,中國、臺灣、香港編碼都不一樣,不同的雙字節編碼完全不兼容。在這樣的背景下,就出現了UNICODE,它是國際組織統一制定的,規定所有字符都是兩個字節,包括英文字符(高位填零),並且將其他的語言進行了編碼。UNICODE做到了統一,但是也是一種浪費,因爲對於英文來說,完全浪費了一個字節。隨着內存的增大,對於內存方面的限制越來越寬鬆,同時互聯網發展,文件的傳輸,需要字符做到統一。在具體實現UNICODE碼時,就出現了UTF-8,UTF-16,UTF-32。

      另外字符編碼中經常看到ANSI、UNICODE BIG ENDIAN,ANSI全稱是AMERICAN NATIONAL STANDARDS INSTITUTE,美國國家標準協會,此處代表設定的標準,那些一系列的即用單字節又用雙字節表示的字符集,都看成ANSI,對於計算機中的ANSI,不同的系統是不一樣的,可能是GBK,也有可能是其他的,而UNICODE BIG ENDIAN還有相對的little endian,限定的是碼的存儲格式,前者是高字節在高位,後者相反。

     爲了實現統一,Windows中程序都是UNICODE編碼的,即使是非UNICODE編碼,也會進行隱式的轉化,所以寫程序時最好寫成UNICODE字符集的原因,雖然改成多字符集的形式,既支持單字節,又支持雙字節,但是這樣會使程序多許多隱式的轉換,這是不可取的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章