python3随记——字符编码
1.1什么是字節
字節(Byte)是計算機信息技術用于計量存儲容量的一種計量單位,也表示一些計算機編程語言中的數據類型和語言字符。
比特(bit)在計算機中最小的單位,在二進制位的電腦的系統中,每一bit,表示0或1 ,的數字信號。
?
1.1.1在不同字符編碼的字節表示
符號: 英文標點占一個字節,中文的標點占兩個字節。例:英文句號"."占一個字節大小,中文句號"。"占兩個字節大小。
1.2進制的表示和轉換
進制的表示:
二進制: 0 1
8進制 : 0 1 2 3 4 5 6 7 (0-7的組合)(8進制的一位對應2進制的3位,不足3位補位用0表示)
10進制:0-9的組合
16進制:0 1 2 3 4 5 6 7 8 9 A B C D E F(0-F的組合)(16進制的一位對應2進制的4位,不足4位補位用0表示)
?
進制之間的轉換:
http://jingyan.baidu.com/article/495ba84109665338b30ede98.html
1.3數據存儲和數據傳輸
數據存儲
硬盤廠商是以10進制(即10的3次方=1000,1MB = 1000KB)計算的,而計算機是二進制表示(2的10次方,即1MB = 1024KB)。
在計算機好多1TB的硬盤,在計算機只有
1TB = 1000GB = 1000000MB = 1000000000KB = 1000000000000B ?硬盤廠商表示
1TB =?1000000000000B /1024 /1024 /1024 = 931GB ? 計算機容量表示
1KB=1024B;1MB=1024KB=1024×1024B。其中1024=210。 1B(byte,字節)= 8 bit(見下文); 1KB(Kibibyte,千字節)=1024B= 2^10 B; 1MB(Mebibyte,兆字節,百萬字節,簡稱“兆”)=1024KB= 2^20 B; 1GB(Gigabyte,吉字節,十億字節,又稱“千兆”)=1024MB= 2^30 B; 1TB(Terabyte,萬億字節,太字節)=1024GB= 2^40 B; 1PB(Petabyte,千萬億字節,拍字節)=1024TB= 2^50 B; 1EB(Exabyte,百億億字節,艾字節)=1024PB= 2^60 B; 1ZB(Zettabyte,十萬億億字節,澤字節)= 1024EB= 2^70 B; 1YB(Yottabyte,一億億億字節,堯字節)= 1024ZB= 2^80 B; 1BB(Brontobyte,一千億億億字節)= 1024YB= 2^90 B; 1NB(NonaByte,一百萬億億億字節) = 1024 BB = 2^100 B; 1DB(DoggaByte,十億億億億字節) = 1024 NB = 2^110 B?數據傳輸:
數據存儲是字節("Byte")為單位,數據傳輸大多是以“位”("bit",又名“比特”)為單位,一個位就表示0或q(即二進制),每8個位("bit",簡寫為b)組成一個字節(Byte,簡寫B),bit是最小一級的信息單位
在計算機中傳輸的最小單位是信號單位bit ,數字信息流的基本單位是bit,時間的基本單位是s(秒),因此bit/s(比特每秒)是描述寬帶的基本單位。
帶寬(bps)就是在一個固定的時間內(1秒),能通過的最大位數據。
bps (bit per second)
例:?
有些寬帶運營商,一個20Mbps的帶寬 ?,而實際的最大下載速度大約只有2.5MB/s (這是以每秒多少字節下載,大寫B)
20Mb/s = 20 / 8 = 2.5MB/s
1Mb/s = 1024Kb/s = ?1024Kb / 8 ?= 128KB / s ?
你的上傳速度和下載速度 都是共用你的帶寬
?
1.4字符編碼
字符編碼就是:特定的字符如何對應一個特定的數字標準
1.ASCII編碼
由于計算機是美國人發明的,因此,最早只有128個字母被編碼到計算機里,也就是大小寫英文字母、數字和一些英文符號,這個編碼被稱為ASCII碼,最初使用的是ASCII碼(American ?Standared ?Code for information ?interchange ,美國標準信息交換碼)。
?雖然標準ASCII字符集字符數目有限, 但由于計算機基本處理單位為字節(1Byte =1bit?),所以一般 任意一個字節存放一個ASCII字符,每一個字節中多余出來的一位(最高位)在計算機內部通常保持為0(在數據傳輸是可用做奇偶校驗位。)由于標準ASCII字符集數目有限,在實際應用中往往不夠用,后來加入了很多畫表格時需要用到下劃線、豎線、交叉等序號遍到了最后一個狀態255,從128到255這一頁的字符集稱為“擴展字符集”。
2.GBK 、GB18030、GB2312
GB2312(1980年)一共收錄了7445個字符,包括6763個漢字和682個其它符號。漢字區的內碼范圍高字節從B0-F7,低字節從A1-FE,占用的碼位是72*94=6768。其中有5個空位是D7FA-D7FE。
GB2312 支持的漢字太少。1995年的漢字擴展規范GBK1.0收錄了21886個符號,它分為漢字區和圖形符號區。漢字區包括21003個字符。2000年的 GB18030是取代GBK1.0的正式國家標準。該標準收錄了27484個漢字,同時還收錄了藏文、蒙文、維吾爾文等主要的少數民族文字。現在的PC平臺必須支持GB18030,對嵌入式產品暫不作要求。所以手機、MP3一般只支持GB2312。
GBK就是漢字編碼的規范
從ASCII、GB2312、GBK 到GB18030,這些編碼方法是向下兼容的,即同一個字符在這些方案中總是有相同的編碼,后面的標準支持更多的字符。
3.unicode編碼
全世界有上百種語言,日本把日文編到Shift_JIS里,韓國把韓文編到Euc-kr里,各國有各國的標準,就會不可避免地出現沖突,結果就是,在多語言混合的文本中,顯示出來會有亂碼。
因此,Unicode應運而生。Unicode把所有語言都統一到一套編碼里,這樣就不會再有亂碼問題了。Unicode標準也在不斷發展,但最常用的是用兩個字節表示一個字符(如果要用到非常偏僻的字符,就需要4個字節)。現代操作系統和大多數編程語言都直接支持Unicode。
UNICODE?。( Universal Multiple-Octet Coded Character Set )簡稱UCS
在UNICODE 中,一個漢字算兩個英文字符的時代已經快過去了。
無論是半角的英文字母,還是全角的漢字,它們都是統一的“一個字符”!同時,也都是統一的“兩個字節"”
請注意”字符”和”字節”兩個術語的不同,“字節”是一個8位的物理存貯單元,而“字符”則是一個文化相關的符號。在unicode中,一個字符就是兩個字節。一個漢字算兩個英文字符的時代已經快過去了。
我們已經知道,英文字母只用一個字節表示就夠了,如果unicode統一規定,一個字符都表示兩字節這對于存儲空間來說是極大的浪費,文本文件的大小會因此大出二倍,這是難以接受的。
4.UTF-8
unicode在很長一段時間內無法推廣,直到互聯網的出現,為解決unicode如何在網絡上傳輸的問題,于是面向傳輸的眾多?UTF(UCS Transfer Format)標準出現了,顧名思義,UTF-8就是每次8個位傳輸數據,
而UTF-16就是每次16個位。UTF-8就是在互聯網上使用最廣的一種unicode的實現方式,這是為傳輸而設計的編碼,并使編碼無國界,這樣就可以顯示全世界上所有文化的字符了。
UTF-8最大的一個特點,就是它是一種變長的編碼方式。它可以使用1~4個字節表示一個符號,根據不同的符號而變化字節長度,當字符在ASCII 碼的范圍時,就用一個字節表示,保留了ASCII字符一個字節的編碼做為它的一部分,注意的是unicode一個中文字符占2個字節,而UTF-8一個中 文字符占3個字節)。 從unicode到uft-8并不是直接的對應,而是要過一些算法和規則來轉換。更新中。。。。。
轉載于:https://www.cnblogs.com/keme/p/6029632.html
總結
以上是生活随笔為你收集整理的python3随记——字符编码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1108File Space Bitma
- 下一篇: OpenSSL 之 RSA 相关命令学习