Python字符串編碼python
字符串編碼的前世此生網絡
1. 一個字節由8個bit組成,因此1個字節能表示的最大數爲255;編碼
2. 計算機是美國人發明的,因此一個字節能夠表示全部的字符了,因此ASCII就成爲美國人的標準編碼;spa
3.可是ASCII編碼處理漢字是明顯不夠的,中文不止255個漢字,因此中國製定GB2312編碼,用兩個字節表示一個漢字,GB2312還把ASCII包含進去了,同理,日文。韓文等等上百個國家爲了解決問題都發展了一套字節的編碼,標準就愈來愈多,若是出現多種語言混合現實就必定會亂碼;code
4.這時候出現了Unicode編碼,將全部的標準統一到了一套編碼裏面;blog
5.那ASCII編碼和Unicode編碼之間是如何進行轉換的?下面是具體的轉換方法:內存
5.1 字母A用ASCII編碼表示的十進制是65,二進制即爲0100 0001utf-8
5.2 漢字「中」已經超出了ASCII編碼的範圍,用Unicode編碼十進制是20013 二進制是0100 1110 0010 1101ci
5.3 A字母用Unicode編碼時只須要在前面補上0 即爲0000 0000 0100 0001開發
6.亂碼問題解決了,可是同時又出現了一個新的問題,若是所有是英文字母的話,Unicode編碼比ASCII編碼多消耗一倍的內存,同時網絡傳輸的時候也多消耗一倍的帶寬;
7.因此這個時候出現了長度可變化的utf-8的編碼。
字符與字節
1byte = 8bit 1KB = 1024 bytes 1MB = 1024KB 1GB = 1024MB 1TB = 1024GB
ASCII編碼: 一個英文字母佔據一個字節的空間,一箇中文字母佔據兩個字節的空間;
utf-8編碼: 一個英文字符等於一個字節,一箇中文(含繁體)等於三個字節。中文標點佔據三個字節,英文標點佔據一個字節;
Unicode編碼: 一個英文等於兩個字節,一箇中文(含繁體)等於兩個字節。中文標點佔據兩個字節,英文標點佔據兩個字節。
Unicode編碼爲GB2312編碼 utf-8編碼 ASCII等編碼的一個父級編碼,那這些子編碼之間子在須要相互轉換的時候就須要藉助父級編碼Unicode。子編碼是能夠直接轉換爲父級編碼,而後父級編碼轉換爲另外一種類型的子編碼。
Python2和Python3字符編碼存在的問題
獲取默認編碼格式:
>>> import sys
>>> sys.getdefaultencoding()
咱們發如今python2中默認的編碼格式是 'ascii' 編碼,在python3中默認的編碼格式爲utf-8
第一步:在終端輸入python進入python2的開發環境
第二步:s = "中國" # 獲取s的值拿到 '\xe4\xb8\xad\xe5\x9b\xbd' 說明此時的ASCII編碼沒法識別漢字
Python2和Python3字符編碼問題的解決方案
import sys
defaultencoding = 'utf-8'
if sys.getdefaultencoding() != defaultencoding: reload(sys) sys.setdefaultencoding(defaultencoding)