當前位置:
首頁 > 最新 > 理清字符集和字元編碼關係

理清字符集和字元編碼關係

前言

計算機內部由集成電路(Integrated Circuit,IC)構成,IC的所有引腳,只有直流電壓0V和5V兩個狀態。也就是說,IC的一個引腳,只能表示兩個狀態。正是由於這個原因,決定了計算機的信息只能用二進位數處理。

由於計算機底層使用二進位數來存儲和傳輸數據,而我們人類使用文字、數字和圖形符號來表達信息,因此兩者之間需要通過某種映射關係來實現。根據映射方向的不同,又可以分為編碼和解碼。文字、數字等轉換成二進位數被稱為編碼,而二進位數轉化為文字、數字和圖形符號等稱為解碼。其中,文字與符號總稱為字元(Character),而字元的集合就是字符集(Charset)。常見的字符集包括ASCII字符集、GB2312字符集(簡體字符集)、GBK字符集(簡繁字符集)和通用字符集(UCS)和Unicode字符集。


ASCII(American Standard Code for Information Interchange,美國信息交換標準代碼)。ASCII字符集包含128個字元,它用8bit表示,其中,第一位用0表示。ASCII編碼則是一種將ASCII字符集中的字元映射到二進位數的關係,譬如:。


由於中文常用字達到好幾千,因此8bit不夠用了,增加到16bit,那麼就GB2312編碼就可以表示2^16=65536字元。GB2312編碼就是將這些字元映射到二進位能表示的數,方便計算機存儲或傳輸。

由於漢字種類繁多,除了6000多種簡體字體以外,還有繁體字,針對這種情況,GB2312就不能滿足了。此時,我們提出了GBK編碼方式。

除了簡體字、繁體字之外,由於我們是多民族國家,每個民族可能對應一種字元,那麼就需要一種新的編碼方式來滿足這種需求--GB18030。

為了整合全世界的所有語言文字,我們的先輩們想出了一個方法Unicode(Universal Mutiple-Octet Coded Character Set),它只是字符集,卻沒有規定這個二進位該如何存儲、傳輸。其中,它的字符集稱為Universal Character Set (UCS),它規定了需要多少位元組存儲字字元,分別有2個位元組和4個位元組,各自對應UCS-2、UCS-4。而UTF(Unicode Transformation Format)規定了字元如何傳輸和存儲。UTF又分為UTF-8、UTF-16和UTF-32。我們重點介紹下UTF-8。

根據Huffman編碼的思想(最常出現的字元編碼盡量的短),以及不同符號使用不同的位元組長度表示,因此UTF-8採用了1-4個位元組表示一個符號,這種變長的編碼方式。它的編碼規則如下:

1.對於單位元組的符號,位元組的第一位置0,後面7位為這個符號的Unicode碼。因此,對於英語字母,UTF-8編碼和ASCII碼是相同的。

2.對於n個位元組的字元(n>1),第一個位元組的前n位都置為1,第n+1位置為0,後面位元組的前兩位一律置為10。剩下的沒有提及的二進位位,全部為這個符號的Unicode碼。

Unicode 和 UTF-8 之間的轉換

這裡只介紹Unicode轉換為UTF-8 ,以漢字 "柯" 為例。已知 "柯" 的Unicode碼是 (0110 0111 1110 1111),根據上表,我們可以知道 "柯"這個Unicode對應的UTF-8編碼需要3個位元組。然後,從0110 0111 1110 1111從由往左依次取數放入到1110 xxxx 10xx xxxx 10xx xxxx中,得到最終的結果是 1110 0110 1001 1111 1010 1111,轉換成十六進位是E6 9F AF。

大端與小端

UTF-16、UTF-32是多位元組傳輸,存在位元組序的問題,而UTF-8是單位元組傳輸,則不存在位元組序的問題。為了幫助大家理解位元組序的問題,我還是舉個栗子吧,仍來以漢字 "柯" 為例,它的Unicode碼是,它需要兩個位元組存儲,一個位元組是67,另一個位元組是ef。如果採取大端方式來存儲,那麼67在前,ef在後,而小端方式剛好相反。

由於UTF-16、UTF-32存在兩種存儲方式,那麼就需要我們標識我們採用了何種存儲方式。我們採用在文件開始位置輸入特殊位元組序列(位元組序標記,Byte Order Mark,bom)來標識我們採用了哪種方式,如果文件頭兩個位元組是FF FE(FF比FE大1),則表示採用大端方式;如果文件頭兩個位元組是FE FF,則表示採用小端方式。

木可大大

——————————

分享知識傳播技能


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

一場狂歡派對,童心獻禮——《頭號玩家》上映推薦
黑不溜秋帶火星的使者壁紙

TAG:全球大搜羅 |