計算機基礎:字符集和編碼

背景知識

計算機中的數據是二進制存儲,而人類的文字對計算機來說是不能識別的。那麼爲了讓計算機能夠處理文字,就需要人爲的給文字設置一個數字編碼(比如65代表A),數字再轉爲二進制數據,計算機才能夠正常處理。

什麼是字符集

人工收集的一批文字符號的集合就稱爲字符集。顯然由於文化、國界的存在,自然會產生多種字符集,比如
  • 美國的字符集:主要包含英文子母、音標、標點符號等,這就是ascii字符集
  • 中國的字符集:主要包含中文文字、標點符號等,這就是gb2312字符集等
隨着計算機的發展普及,上述這種區域性的字符集無法滿足使用需求。因此產生了一種能夠代表全世界人類文明的通用字符集,稱爲Unicode。

什麼是字符編碼

上述過程中,將字符集中的字符和數字建立對應關係(比如65代表A),就是字符編碼;顯然字符集和字符編碼是密不可分的。
 
如:
ASCII字符集:總數量爲256個
ASCII編碼:由於ASCII字符集數量較小,因此一個字節所表示的數字個數(256)就能足夠表示全部的字符集。即ASCII編碼後,每個字符的存儲空間就是1字節。
缺點:由於ASCII是最早的字符集,且初期主要用於美國,因此字符集的覆蓋率顯然不足。
 
如:
GB2312字符集&編碼
不同於ASCII字符集,中文體系可不僅幾百個字符,因此需要建立一種字符集和對應的編碼來滿足計算機處理中文的需求。於是由中國國家標準總局發佈,在1981年5月1日實施了GB2312字符集&編碼標準。該字符集收錄的漢字已經覆蓋中國大陸99.75%的使用頻率。GB2312編碼通行於中國大陸,不僅如此,新加坡等地也採用此編碼。
 
但是源於中文文化的博大精深,對於人名、古漢語等方面出現的罕用字,GB2312也不能處理了,這導致了後來GBK及GB 18030漢字字符集的出現;
存儲空間:基於兼容性及節省空間的要求,英文字符依然採用1字節存儲。而中文則採用2字節來表示。

Unicode字符集和編碼

以上還都是區域性的字符集和編碼,隨着計算機普及和網絡發展,繼續一種能夠在全世界通用的字符集和編碼,於是Unicode誕生了。
來看看Unicode的別稱:統一碼、萬國碼、單一碼、標準萬國碼,Unicode就已經包含了超過十萬個字符。它規定了符號對應的二進制代碼,至於這個二進制代碼如何存儲則沒有任何規定。它的想法很簡單,就是爲每個字符規定一個用來表示該字符的數字,僅此而已。
比如中國的中字,16進制下的數值=4E2D,轉爲二進制=0100 1110 0010 1101,那麼至少需要2字節才能存儲。
 
Unicode是字符集,UTF-32/ UTF-16/ UTF-8是字符編碼方案;
 
UTF-32
又稱UCS-4,是一種將Unicode字符編碼的協定,對每個字符都使用4字節存儲表示。但從空間而言,顯然是非常沒有效率的。
 
UTF-16
儘管有Unicode字符非常多,但是實際上大多數人不會用到超過前65535個以外的字符。因此,就有了一種Unicode編碼方式,叫做UTF-16(因爲16位 = 2字節)。
UTF-16將0–65535範圍內的字符編碼成2個字節。
優點:UTF-16編碼最明顯的優點是它在空間效率上比UTF-32高兩倍,因爲每個字符只需要2個字節來存儲(除去65535範圍以外的),而不是UTF-32中的4個字節。
 
UTF-8
它可以用來表示Unicode標準中的任何字符,且其編碼中的第一個字節仍與ASCII兼容,這使得原來處理ASCII字符的軟件無須或只須做少部份修改,即可繼續使用。因此,它逐漸成爲電子郵件、網頁及其他存儲或傳送文字的應用中,優先採用的編碼。
互聯網工程工作小組(IETF)要求所有互聯網協議都必須支持UTF-8編碼。
  • 存儲空間:UTF-8使用一至四個字節爲每個字符編碼;可變長的編碼方式。
  • 對ASCII字符集的字符,此編碼使用1個字節表示。
  • 對於更復雜的字符(拉丁文、阿拉伯文等),此編碼時用2個字節表示。
  • 對於多文種平面的字符(包括中日韓文字、東南亞文字、中東文字等,大部分常用字),此編碼時用3個字節表示。
  • 剩餘的極少數字符,則用4字節表示。
 
特點:由於是變長的編碼方式,因此無法根據字符數量判斷實際佔用的存儲空間。

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