字符編碼
計算機只能處理數字,如果要處理文本,就必須先把文本轉換為計算機能識別的二進制數才能處理,將文本轉換為二進制數的過程稱為:編碼;
- 常見的字符編碼格式有:ASCII,unicode,GBK,UTF-8等
ASCII
ASCII (American Standard Code for Information Interchange): 美國信息交換標准代碼,一種使用7個或8個二進制位進行編碼的方案(標准ASCII碼為7位,擴充為8位),最多可以給256個字符(包括英文大小寫字母、數字、標點符號、控制字符及其他符號)
GB2312/GBK
要處理中文顯然一個字節是不夠的,至少需要兩個字節,而且還不能和ASCII編碼沖突,所以,中國制定了GB2312
編碼,用來把中文編進去。
- GB2312,又稱為:《信息交換用漢字編碼字符集》,由中國國家標准總局1980年發布,1981年5月1日開始實施的一套國家標准,標准號是[GB 2312](https://baike.baidu.com/item/GB 2312)—1980。
- GB 2312標准共收錄6763個漢字,其中一級漢字3755個,二級漢字3008個;同時,GB 2312收錄了包括拉丁字母、希臘字母、日文平假名及片假名字母、俄語西里爾字母在內的682個全角字符。
- GBK,國標碼,又稱為:《漢字內碼擴展規范》,對原GB2312進行擴充,該標准一經推出,就WINDOWS95所采用。
- GBK支持繁體/簡體中文,GB2312只支持簡體中文。
Unicode
全世界有上百種語言,各國有各國的標准,就會不可避免地出現沖突,結果就是,在多語言混合的文本中,顯示出來會有亂碼。因此,Unicode應運而生。
- Unicode,(萬國碼,統一碼),Unicode把所有語言都統一到一套編碼里,這樣就不會再有亂碼問題了。
- Unicode,又分為兩種:ucs-2(2字節的Unicode編碼)和ucs-4(4字節的Unicode編碼)
UTF-8
新問題的出現:Unicode編碼統一采用4字節編碼,不利於數據傳輸,因此,一種對Unicode編碼進行壓縮的UTF-8編碼出現。
- UTF-8,可變長的萬國碼,最少使用1個字節(8bit),最多使用4個字節數進行編碼,常用的英文字母被編碼成1個字節,漢字通常是3個字節。
- python3默認使用該編碼格式。
計算機系統通用的字符編碼工作方式
在計算機內存中,統一使用Unicode編碼,當需要保存到硬盤或者需要傳輸的時候,就轉換為UTF-8或其他編碼。
- 用文本文件編輯文本的時候,從文件讀取的UTF-8/GBK字符被轉換為Unicode字符到內存里,編輯完成后,保存的時候再把Unicode轉換為UTF-8保存到文件:
字節
字節是二進制數據的單位。一個字節通常8位長。但是,一些老型號計算機結構使用不同的長度。為了避免混亂,在大多數國際文獻中,使用詞代替byte。
在多數的計算機系統中,一個字節是一個8位長的數據單位,大多數的計算機用一個字節表示一個字符、數字或其他字符。一個字節也可以表示一系列二進制位。
字節通常簡寫為“B”,而位通常簡寫為小寫“b”,計算機存儲器的大小通常用字節來表示。
字節與bit
數據存儲是以“字節”(Byte)為單位,數據傳輸大多是以“位”(bit,又名“比特”)為單位,一個位就代表一個0或1(即二進制),每8個位(bit,簡寫為b)組成一個字節(Byte,簡寫為B),是最小一級的信息單位。
-
ASCII編碼:一個英文字母(不分大小寫)占一個字節的空間。一個二進制數字序列,在計算機中作為一個數字單元,一般為8位二進制數。換算為十進制,最小值-128,最大值127。如一個ASCII碼就是一個字節。
-
GBK編碼: 一個英文字母占一個字節空間,一個中文字符占兩個字節空間。
-
UTF-8編碼:一個英文字符等於一個字節,一個中文(含繁體)等於三個字節。中文標點占三個字節,英文標點占一個字節
-
Unicode編碼:一個字符占四個字節
-
換算:
1byte = 8bit
1KB(KiB) = 1024byte
1MB(MiB) = 1024KB
1GB(GiB) = 1024MB
1TB(TiB) = 1024GB