【转】刨根究底字符编码【2.0版】(2):关键术语解释
上一篇中講道,字符編碼所涉及的面非常廣,向下的話,涉及到計算機的底層技術,甚至是硬件實現。
因此,這里就讓我們從字符編碼涉及到的最基本的術語講起。大部分術語你可能都已經有了解了,但我們現在從字符編碼的角度,再來看這些術語,或許你會有不同的理解。
位
1.
位,即比特(Bit),亦稱二進制位、比特位、位元,指二進制數中的一位,是計算機中信息表示的最小單位。
Bit是Binary digit(二進制數位)的縮寫,由數學家John Wilder Tukey提出,習慣上以小寫字母b表示,如8比特可表示為8b。
2.
每個比特有0和1兩個可能的值,除了代表數值本身之外,還可代表:
- 數值的正、負;
- 兩種狀態,如電燈的開、關,某根導線上電流的有、無,等等;
- 抽象邏輯上的是、否,或者說真、假。
字節
1.
在計算機中,通常都會使用一連串的位(即比特),稱之為位串(即比特串,bit string)。
很顯然,計算機系統都不會讓你使用任意長度的位串,而是使用某個特定長度的位串。
一些常見的位串長度形式具有約定好的名稱,如,半字節(nibble)代表四個位的組合,字節(byte)代表8個位的組合;還有字(word)、雙字(Double word,簡寫為Dword)、四字(Quad word,簡寫為Qword)、十字節(Ten byte,簡寫為Tbyte)等等。
2.
字節(byte),又稱為位元組,音譯為“拜特”(但很少使用這個譯名),是計算機中計量存儲容量和傳輸容量的一種基本計量單位,是由連續的、固定數量的位(即比特)所組成的位串(即比特串)。
字節一般由8個位組成,即1 byte = 8 bit。習慣上用大寫的B表示,如3字節可表示為3B。
現代個人計算機(PC)的存儲器編址,一般是以字節為單位的,稱之為按字節編址,因此字節一般也是存儲器的最小存取單位以及處理器的最小尋址單位(也有按位尋址、按字尋址等等,但在個人計算機上應用不普遍,這里不討論)。
3.
字節作為存儲器的最小存取單位以及處理器的最小尋址單位這一重要特點,跟字符編碼的關系極為密切,比如,碼元的單字節與多字節、字節序的大端序與小端序等,都與以字節為基礎的基本數據類型密切相關(詳見后文介紹)。
4.
習慣上,按照下面的圖來排列一個字節上的各個位的順序,即按照從右到左的順序,依次為最低位(第0位)到最高位(第7位):
5.
注意,字節不一定非得是8位,以前也有過4位、6位、7位、12位或18位作為一個字節的標準,比如IBM 701(36位字長,18位為一字節)、IBM 702(7位字長,7位為一字節)、CDC 6600(60位字長,12位為一字節byte)等。只是現代計算機的事實標準就是用8位來代表一個字節。
最終之所以形成以8位為一個字節這一事實標準,除了歷史原因和商業原因之外,最重要的原因應該是由于二進制的特性——2的次方計算更方便快捷。
正是因為這個原因,在很多較為嚴謹的技術規格文獻中,為了避免產生歧義,更傾向于使用8位組(Octet)而不是字節(Byte)這個術語來強調8比特串。
不過,由于大眾基本上都將字節理解為8比特的8位組,因此一般文章中如果未作特別說明,基本上都將8位組直接稱之為字節,或者說,字節一般默認指的是8位組。
字與字長
1.
雖然字節是大多數現代計算機的最小存儲單位和傳輸單位,但并不代表它是計算機可以最高效地處理的數據單位。
一般來說,計算機可以最高效地處理的數據大小,應該與其字的字長相同,這就涉及到了字及字長的概念。
- 字:?在計算機中,一串比特位(即位串、比特串)是作為一個整體來處理或運算的,這串比特位稱為一個計算機字,簡稱字。字通常分為若干個字節。
- 字長:?即字的長度,是指計算機的每個字所包含的位數。字長決定了CPU一次操作所處理的實際比特位數量的多少。字長由CPU對外數據通路的數據總線寬度決定。
2.
計算機處理數據的速率,顯然和它一次能加工的位數以及進行運算的快慢有關。如果一臺計算機的字長是另一臺計算機的兩倍,若兩臺計算機的速度相同,在相同的時間內,前者能做的工作一般是后者的兩倍。
因此,字長與計算機的功能和用途有很大的關系,是計算機的一個重要技術指標。
在目前來講,桌面平臺的處理器字長正處于從32位向64位過渡的時期,嵌入式設備基本穩定在32位,而在某些專業領域(如高端顯卡),處理器字長早已經達到了64位乃至更多的128位。
編碼與解碼
編碼(Encode),是信息從一種形式轉換為另一種形式的過程,比如用預先規定的方法將字符(文字、數字、符號等)、圖像、聲音或其它對象,轉換成規定的電脈沖信號或二進制數字的過程,就屬于編碼。
解碼(Decode),為編碼的逆過程。
字符與字符集
1.
字符(Character),是各種文字和符號的總稱,包括文字、數字、字母、音節、標點符號、圖形符號等。
字符集(Character Set、Charset),字面上的理解就是字符的集合,是一個自然語言文字系統支持的所有字符的集合。
字符集準確地來說,指的是已編號的字符的有序集合(但不一定是連續的,后文有詳細介紹)。
2.
常見字符集有ASCII字符集、ISO 8859系列字符集(ISO 8859-1~8859-16)、GB系列字符集(GB2312、GBK、GB18030)、BIG5字符集、Unicode字符集等。
字符編碼
1.
字符編碼(Character Encoding),是把字符集中的字符按一定方式編碼為某指定集合中的某一對象的過程。比如將字符編碼為由0和1兩個數字所組成的位串模式、由0~9十個數字所組成的自然數序列或電脈沖等。
也就是說,在字符集與指定集合兩者之間建立一個對應關系(即映射關系)的過程。這是信息處理的一項基礎技術。
因此,通常以字符集來定義字符,以計算機為基礎的信息處理系統則利用電子元件(即硬件)的不同狀態的組合來表示、存儲和處理字符。
2.
電子元件的不同狀態,可以用來代表數字系統中的數字,比如電子元件一般具有電路的斷開和閉合兩種狀態,其中電路斷開代表二進制中的0,電路閉合代表二進制中的1。
因此,字符編碼的過程,也就可以理解為,將字符轉換映射為計算機可以接受的二進制數字的過程,這樣才便于字符在計算機中表示、存儲、處理和傳輸(包括在網絡中傳輸)。
常見的例子是將常用的拉丁字母表編碼成摩斯電碼和ASCII碼。
其中,ASCII碼將字母、數字和其它符號進行編號,并且在計算機中直接用7比特的二進制數字來表示這個編號。通常會額外地在最高位(即首位)再增加一個擴充的比特位“0”,以便于計算機系統剛好以1個字節(8比特位)的方式來進行處理、存儲和傳輸。
字符編碼模型
1.
字符編碼模型CEM(Character Encoding Model),是反映字符編碼系統的結構特點和各構成部分相互關系的模型框架。
2.
由于歷史的原因,早期一般認為字符集和字符編碼是同義詞,并不需要進行嚴格區分。因此在像ASCII這樣的簡單字符集為代表的傳統字符編碼模型中,這兩個概念的含義幾乎是等同的。
因為,在傳統字符編碼模型中,基本上都是將字符集里的字符進行編號(字符編號轉化為二進制數后一般不超過一個字節),然后該字符編號就是字符的編碼。
但是,由統一碼(Unicode)和通用字符集(UCS)為代表的現代字符編碼模型,并沒有直接采用ASCII這樣的簡單字符集的編碼思路,而是采用了一個全新的編碼思路。
3.
這個全新的編碼思路,將字符集與字符編碼的概念更為細致地分解為了以下幾個方面:
- 字符集中包含了哪些字符;
- 這些字符的數學編號是什么;
- 這些數學編號如何編碼成一系列邏輯層面有限大小的二進制數字,即碼元序列;
- 這些邏輯層面的碼元序列如何轉換映射為物理層面的字節流,即字節序列;
- 在某些特殊的傳輸環境中(比如Email中),再進一步將字節序列進行適應性編碼處理。
這幾個方面作為一個整體,于是構成了現代字符編碼模型。
4.
現代字符編碼模型之所以要分解為這么幾個方面,其核心思想是創建一個能夠用不同方式來編碼的通用字符集。
注意這里的關鍵詞:“不同方式”與“通用”。
這意味著,同一個字符集,可以通用于不同的編碼方式;也就是說,可以采用不同的編碼方式來對同一個字符集進行編碼。字符集與編碼方式之間的關系可以是一對多的關系。
更進一步而言,在傳統字符編碼模型中,字符編碼方式與字符集是緊密結合在一起的;而在現代字符編碼模型中,字符編碼方式與字符集脫鉤了。
用軟件工程的專業術語來說,就是將之前緊密耦合在一起的字符編碼方式與字符集解耦了。
因此,為了正確地表示這個現代字符編碼模型,需要采用更多比“字符集”和“字符編碼”更為精確的概念術語來描述。
5.
在Unicode Technical Report #17 (UTR統一碼技術報告第17號)《UNICODE CHARACTER ENCODING MODEL[1]》中,現代字符編碼模型分為了5個層次,并引入了更多的概念術語來描述(下面所涉及到的一些全新的概念術語,這里只做簡介,更詳細的解釋見后文):
- 第1層 抽象字符表ACR(Abstract Character Repertoire):明確字符的范圍(即確定支持哪些字符)
- 第2層 編號字符集CCS(Coded Character Set):用數字編號表示字符(即用數字給抽象字符表ACR中的字符進行編號)
- 第3層 字符編碼方式CEF(Character Encoding Form):將字符編號編碼為邏輯上的碼元序列(即邏輯字符編碼)
- 第4層 字符編碼模式CES(Character Encoding Scheme):將邏輯上的碼元序列映射為物理上的字節序列(即物理字符編碼)
- 第5層 傳輸編碼語法TES(Transfer Encoding Syntax):將字節序列作進一步的適應性編碼處理
好,關鍵術語就簡要介紹到這里。
參考資料
[1]
UNICODE CHARACTER ENCODING MODEL:?http://www.unicode.org/reports/tr17/
總結
以上是生活随笔為你收集整理的【转】刨根究底字符编码【2.0版】(2):关键术语解释的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手感媲美苹果!realme GT2大师探
- 下一篇: 2020-11-04