==============================
存儲器
位(bit),位元組(byte),字(word), 雙字(double word)
1 byte = 8 bits
1 word = 2 bytes = 16 bits
1 double word = 2 words = 4 bytes = 32 bits
單位元組
來自遠古時代。
計算機最初是在美國等國家發明的,是以隻需要把英文字母、數字、标點符号表示出來就好。
這些字元不多,也就200多個。
使用一個位元組,從00000000到11111111共2^8=256個字元。
如:01000001(即十進制的65)表示字元"A"
Python的chr和ord函數,可以對ASCII編碼進行了轉換。
如:chr(65) == 'A', ord('A') == 65
ISO-8859-1編碼是單位元組編碼,向下相容ASCII。
其編碼範圍是0x00-0xFF,0x00-0x7F之間完全和ASCII一緻,0x80-0x9F之間是控制字元,0xA0-0xFF之間是文字元号。
此字元集主要支援歐洲使用的語言。
雙位元組
兩個位元組,從00000000 00000000到11111111 11111111共表示256*256個字元
在Unicode中,原本ASCII中的127個字元隻需在前面補一個全零的位元組即可,
比如前文談到的字元‘a’:01100001,在Unicode中變成了00000000 01100001。
優點:基本各種語言的字元,如東亞文字,阿拉伯文字,藏文字等等
缺點:對英文來說浪費嚴重,原本隻需一個位元組就能傳輸的英文現在變成兩個位元組,非常浪費存儲空間和傳輸速度。
unicode在很長一段時間内無法推廣,直到網際網路的出現。
這是 Python3 中的預設編碼!!!!!!
可變長位元組
使用1~4個位元組表示一個符号,根據不同的符号而變化位元組長度。
UTF-8的編碼規則很簡單,隻有二條:
1)對于單位元組的符号,位元組的第一位設為0,後面7位為這個符号的unicode碼。是以對于英語字母,UTF-8編碼和ASCII碼是相同的。
2)對于n位元組的符号(n>1),第一個位元組的前n位都設為1,第n+1位設為0,後面位元組的前兩位一律設為10。剩下的沒有提及的二進制位,全部為這個符号的unicode碼。
比如漢字的"中"字在Unicode中是01001110 00101101,而在UTF-8編碼中是11100100 10111000 10101101。
雙位元組編碼
GB2312編碼範圍:A1A1-FEFE,其中漢字編碼範圍:B0A1-F7FE。
GB2312編碼是第一個漢字編碼國家标準,由中國國家标準總局1980年釋出,1981年5月1日開始使用。
GB2312編碼共收錄漢字6763個,其中一級漢字3755個,二級漢字3008個。
同時,GB2312編碼收錄了包括拉丁字母、希臘字母、日文平假名及片假名字母、俄語西裡爾字母在内的682個全角字元。
GB2312編碼的擴充,基本上采用了原來GB2312-80所有的漢字及碼位,并涵蓋了原Unicode中所有的漢字20902。
總共收錄了883個符号,21003個漢字及提供了1894個造字碼位。
由于GBK同時也涵蓋了Unicode所有CJK漢字,是以也可以和Unicode做一一對應。
混合編碼
Windows簡體中文作業系統中,ANSI是預設的編碼方式。
對于英文檔案是ASCII編碼,對于簡體中文檔案是GB2312編碼(隻針對Windows簡體中文版)