環境:windows簡體中文 + Python2.7,當前環境 str 默認顯示編碼爲 gbk(Linux 環境中 Python2.7 默認顯示編碼爲 utf8)python
>>> a = '你' >>> a '\xc4\xe3'
# 對應 gbk 編碼
>>> a.encode() UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 0: ordinal not in range(128) # 當 a.encode() 執行時,python 解釋器發現 a 的編碼格式爲 GBK ,可是隻有 unicode 編碼才能進行 encode,因此係統幫咱們執行了 a.decode().encode() # 在 python2 中系統默認的 encoding 編碼爲 ascii,因此至關於 a.decode('ascii').encode('ascii') # 查看系統默認 encoding 編碼 >>> import sys >>> sys.getdefaultencoding() 'ascii' # 因 ascii 編碼中不支持中文字符,因此在執行到 decode時就出現了報錯 UnicodeDecodeError # 能夠將 a 解碼爲 unicode,再編碼爲 utf8格式 >>> a.decode('gbk') u'\u4f60' >>> a.decode('gbk').encode('utf8') '\xe4\xbd\xa0' #在 pyhton2 中定義 unicode 編碼的字符串 >>> b u'\u6211' >>> b.encode() UnicodeEncodeError: 'ascii' codec can't encode character u'\u6211' in position 0: ordinal not in range(128) # 在 python2 中系統默認的 encoding 編碼爲 ascii,因此至關於執行了 a.encode('ascii') # ascii 編碼中不支持中文字符,因此出現了UnicodeEncodeError # 能夠把字符串b編碼爲 uft8 或者 gbk 格式,由於這兩種編碼都支持中文字符 >>> b.encode('utf8') '\xe6\x88\x91' >>> b.encode('gbk') '\xce\xd2'
在 Python3 中字符串統一使用 unicode編碼,而且系統默認 encoding 爲 utf8windows
>>> import sys >>> print(sys.getdefaultencoding()) utf-8
>>> a = "你好" >>> a.encode() b'\xe4\xbd\xa0\xe5\xa5\xbd'
>>> a.encode().decode() '你好' >>> a.encode('gbk').decode('gbk') '你好'