【Python基础】字符编码ASCII-GBK-Unicode-UTF-8之间的关系
生活随笔
收集整理的這篇文章主要介紹了
【Python基础】字符编码ASCII-GBK-Unicode-UTF-8之间的关系
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
字符編碼
由于計算機只識別0和1,為了使計算機能夠支持文字和字母等符號,方便實用操作計算機
于是字符編碼應運而生,旨在解決符號和人類語言與計算機0和1建立起一種對應關系
據說不理解字符編碼可能是程序員一輩子的遺憾,拿出來單獨總結一下發展史:ASCII-->Unicode-->UTF-8ASCII是最早期應用在美國方面的,建立了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和18bit = 1bytes(B) 字節,最小的存儲單位,1bytes縮寫為1B1KB = 1024B1MB = 1024KB1GB = 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
更多圖文并茂請點超鏈接
轉載于:https://blog.51cto.com/swiki/2129947
總結
以上是生活随笔為你收集整理的【Python基础】字符编码ASCII-GBK-Unicode-UTF-8之间的关系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何用JavaScript手动实现一个栈
- 下一篇: websocket python爬虫_p