python3隨記——字符編碼

1.1什麼是字節

字節(Byte)是計算機信息技術用於計量存儲容量的一種計量單位,也表示一些計算機編程語言中的數據類型和語言字符。html

比特(bit)在計算機中最小的單位,在二進制位的電腦的系統中,每一bit,表示0或1 ,的數字信號。算法

 

1.1.1在不一樣字符編碼的字節表示

  1. ASCII碼:一個英文字母(不分大小寫)佔一個字節(1B)的空間。一個二進制數字序列,在計算機中做爲一個數字單元,通常爲8位二進制數,換算成10進制,最小值0,最大值255.
  2. utf-8編碼:一個英文字符等於一個字節,一箇中文(含繁體)等於3個字節。
  3. unicode編碼:一個英文等於兩個字節,一箇中文(含繁體)等於2個字節。

符號: 英文標點佔一個字節,中文的標點佔兩個字節。例:英文句號"."佔一個字節大小,中文句號"。"佔兩個字節大小。編程

1.2進制的表示和轉換

進制的表示:網絡

二進制: 0 1編程語言

8進制 : 0 1 2 3 4 5 6 7 (0-7的組合)(8進制的一位對應2進制的3位,不足3位補位用0表示)編碼

10進制:0-9的組合spa

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.htmlcode

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、GB23十二、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並非直接的對應,而是要過一些算法和規則來轉換。 更新中。。。。。
相關文章
相關標籤/搜索