1. 程式人生 > >【Python基礎】字符編碼ASCII-GBK-Unicode-UTF-8之間的關系

【Python基礎】字符編碼ASCII-GBK-Unicode-UTF-8之間的關系

精準 應該 寫入 歷程 UC tran 執行 文件 總結

字符編碼 由於計算機只識別0和1,為了使計算機能夠支持文字和字母等符號,方便實用操作計算機 於是字符編碼應運而生,旨在解決符號和人類語言與計算機0和1建立起一種對應關系 據說不理解字符編碼可能是程序員一輩子的遺憾,拿出來單獨總結一下 發展史: ASCII-->Unicode-->UTF-8 ASCII是最早期應用在美國方面的,建立了A-z和一批特殊符號,一共128種字符與二進制之間的對應關系 比如:小寫字母w 十進制135 轉換為二進制 10000111 空格 0 0 如果表示[空格][空格]w 二進制就是 0010000111 #前面的兩個0代表兩個空格 就有個問題就是二進制本來就一串繁瑣空格和w怎麽話分界線來界定每個字符的界限呢,以致後來就統一了一下所有字符都占8位,每次以8位界限讀取 如果表示[空格][空格]w 二進制就是 00000000 00000000 10000111 ##這裏每1或0占1bit(比特) 於是乎就有了今天的ASCII碼每個字符占1bytes(字節) 換算關系: bit 位,計算機中最小的表示單位,每個字符轉二進制後的0和1 8bit = 1bytes(B) 字節,最小的存儲單位,1bytes縮寫為1B 1KB = 1024B 1MB = 1024KB 1GB = 1024MB ... 優點:建立了對應關系 缺點:並不適用其他國家語言,其他語言解析會出現亂碼,比如中文,韓文等等... GBK 為了同時滿足中文和英文(ASCII),中國人定制了GBK,也就是說這個時候中文和英文使用GBK沒問題,如果寫日文其他語言就會產生亂碼 GBK:2Bytes代表一個中文字符,1Bytes表示一個英文字符 其他國家滿足自己,各個國家紛紛定制了自己的編碼 日本把日文編到Shift_JIS裏,韓國把韓文編到Euc-kr裏 Unicode 旨在解決其他國家語言共存的問題而應運而生,俗稱萬國編碼,僅建立在內存中 由於ASCII 用的是 8位也就是說 最多支持 11111111 轉換成十進制255個編碼 中文恐怕就遠遠不夠了,中文有幾萬個,後來對於中文就在原來1字節(11111111)基礎又加了1個字節 ASCII 英文 11111111 最高支持255個字符 占用1字節 Unicode 支持中文 11111111 11111111 100W+ 占用2-4字節 Unicode為了同時兼容8位的ASCII,在原來ASCII的8位基礎上統一添加00000000實現了 2個bytes 之所以說unicode是定長是因為所有的字符都是占用2bytes 這就是unicode(定長), 統一用2Bytes代表一個字符, 雖然2**16-1=65535, 但unicode卻可以存放100w+個字符,因為unicode存放了與其他編碼的映射關系,準確地說unicode並不是一種嚴格意義上的字符編碼表 UTF-8 很明顯對於通篇都是英文的文本來說,unicode的式無疑是多了一倍的存儲空間(二進制最終都是以電或者磁的方式存儲到存儲介質中的) 於是產生了UTF-8(可變長,全稱Unicode Transformation Format),對英文字符只用1Bytes表示,對中文字符用3Bytes,對其他 生僻字用更多的Bytes去存。於是現在大家也都在推行UTF-8的原因之一 整個發展歷程: ASCII --> GBK --> Unicode --> UTF-8 使用過程: 基於目前的現狀,內存中的編碼固定就是unicode,我們唯一可變的就是硬盤的上對應的字符編碼。 此時你可能會覺得,那如果我們以後開發軟時統一都用unicode編碼,那麽不就都統一了嗎,關於統一這一點你的思路是沒錯的,但我們不可會使用 unicode編碼來編寫程序的文件,因為在通篇都是英文的情況下,耗費的空間幾乎會多出一倍,這樣在軟件讀入內存或寫入磁盤時,都會徒增IO次數, 從而降低程序的執行效率。因而我們以後在編寫程序的文件時應該統一使用一個更為精準的字符編碼utf-8(用1Bytes存英文,3Bytes存中文), 再次強調,內存中的編碼固定使用unicode。 1、在存入磁盤時,需要將unicode轉成一種更為精準的格式,utf-8:全稱Unicode Transformation Format,將數據量控制到最精簡 2、在讀入內存時,需要將utf-8轉成unicode 所以我們需要明確:內存中用unicode是為了兼容萬國軟件,即便是硬盤中有各國編碼編寫的軟件,unicode也有相對應的映射關系,但在現在的開 發中,程序員普遍使用utf-8編碼了,估計在將來的某一天等所有老的軟件都淘汰掉了情況下,就可以變成:內存utf-8<->硬盤utf-8的形式了。

參考:http://www.cnblogs.com/linhaifeng/articles/5950339.html
更多圖文並茂請點超鏈接

【Python基礎】字符編碼ASCII-GBK-Unicode-UTF-8之間的關系