16進制:html
# 十進制轉換成8進制: oct ( 數字) # 十進制轉換成16進制: hex( 數字)
進制轉換:https://blog.csdn.net/u012063703/article/details/42609833編程
CPU、內存、硬盤咱們看到都是採用的16進制計算。編程語言
一個字節(byte)可以用2個16進制的數來表示。4個2進制對應1個16進制。編碼
編碼:spa
全部的系統、編程語言都默認支持Unicode。操作系統
編碼和解碼:.net
# 解碼:decode() UTF-8/GBK... --> decode 解碼 --> Unicode # 編碼:encode() Unicode --> encode 編碼 --> GBK / UTF-8 ..
假設某Python文件是以UTF-8保存的,如今Python2上運行,解釋器讀取該文件: 先從硬盤上按照聲明的UTF-8格式讀取到內存裏, 但此時,Python2不會將讀取的UTF-8格式的文本自動轉換成Unicode的格式,也就是說解釋器把該文件讀取到內存時 該文件仍是UTF-8的格式, 此時你在Windows上打印,因爲Windows中文版默認的終端是GBK,而打印的結果是以UTF-8的格式輸出,這個時候顯示結果就會出現亂碼。code
如下程序在Python2上運行:htm
s = '哈哈哈' print s # 這個輸出結果會出現亂碼,緣由如上所說 s1 = s.decode('utf-8') # 對 s進行解碼(就是解碼成Unicode),括號內要寫明對哪一種格式的編碼進行解碼(如本例中的對UTF-8解碼) print s1 # 這個打印結果就不會出現亂碼, 由於通過解碼s1已經變成了Unicode的格式, 而Unicode和GBK又有一個映射關係、可以互相兼容,因此顯示結果不會出現亂碼 print type(s1) #利用這種方法能顯示出s1的格式是Unicode s2 = s1.encode(‘GBK’) #對s1再進行編碼(就是把Unicode轉換成其餘類型的編碼。例如本句中的轉換成GBK),把s1轉換成GBK格式並賦值給s2(括號內要寫明編碼成的格式,例如本句中的GBK) print s2 #這個打印結果不會出現亂碼, 由於s2是GBK格式的,而系統默認的也是GBK, 因此能正常顯示出來。 s3 = s1.encode(‘utf-8’) # 對s1進行編碼,再把s1轉換成utf-8的格式並賦值給s3 print s3 # 這個打印結果也會出現亂碼, 由於s3也是utf-8格式的,在系統默認的GBK終端中顯示會出現亂碼
總結:blog
Python3中: 文件的默認編碼是utf-8, 讀取到內存裏的字符串的編碼是:Unicode (Python3讀取到內存時都會自動轉成Unicode) Python2中: 文件默認編碼是:ASCII 讀取到內存裏的字符串的編碼: 默認是ASCII,可是,若是文件頭聲明瞭何種編碼,那讀取到內存裏的字符串就是該種編碼(如: 假如文件開頭聲明瞭是GBK,那讀取到內存的字符串就是GBK格式)。 在Python2裏面, Unicode是一個 單獨類型。
轉編碼是不可逆的。轉編碼的過程當中要是出現亂碼就得從新寫,因此,不要轉編碼。
終端(terminal)是繼承操做系統的編碼
Python bytes類型:
# Python2: Python2中的字符串其實更應該稱爲字節串; 在Python2中, bytes == str 另外, Python2中還有個單獨的類型是Unicode,把字符串解碼後就會變成Unicode # Python3: PY3除了把字符串的編碼改爲了Unicode,還把str和bytes作了明確的區分: str就是Unicode格式的字符,bytes是單純的二進制
最後再提示一下,Python只要出現各類編碼問題,無非是哪裏的編碼設置出錯了
常見編碼錯誤的緣由有:
編碼問題參考這篇文章: http://www.cnblogs.com/alex3714/articles/7550940.html