無論是gbk/utf-8,它們都只是一種編碼規則,一種把Unicode數據編碼成字節數據的規則
內存中是Unicode編碼的
open()編碼方式默認是操作系統的
Python3.x,默認編碼、編碼方式均為 encoding=”utf-8
py2默認ASCII
內存中 編碼 存到硬盤
字符串(Unicode)-----------encode----------->二進制bytes
硬盤 解碼 讀取到內存
二進制bytes---------decode-------------->字符串(Unicode)
1.在文本編輯器(如word/txt/Sublime text3/IDEL/各種解釋器等等)編輯文字(中文/英文)時,計算機是
不認識這些的。在我們保存這份文件數據之前,數據是以Unicode形式存在內存中的。
2.保存了的存到磁盤上的數據 是通過某種編碼方式(如utf-8/gbk等)進行編碼(encode) 過的bytes字節串。
(在保存操作時編輯軟件默默地作了編碼工作,有它們默認保存文件的編碼方式)
3.再次打開文件 時,軟件又默默地(從磁盤)做了解碼(decode)工作,即將數據從byte解碼成Unicode(到內
存)。然后以明文呈現給用戶。Unicode是離用戶更近的數據,byte是離計算機更近的數據
Pyhon運行.py文件過程:打開文件,解碼存磁盤的bytes數據成Unicode數據;接着,解釋器將Unicode數據翻譯
成C代碼,再轉成二進制的數據流;最后,通過控制操作系統調用CPU執行二進制數據,得出結果。整個過程結束。
# bytes轉字符串方式一 b=b'\xe9\x80\x86\xe7\x81\xab' string=str(b,'utf-8') print(string) # bytes轉字符串方式二 b=b'\xe9\x80\x86\xe7\x81\xab' string=b.decode() # 第一參數默認utf8,第二參數默認strict print(string) # bytes轉字符串方式三 b=b'\xe9\x80\x86\xe7\x81haha\xab' string=b.decode('utf-8','ignore') # 忽略非法字符,用strict會拋出異常 print(string) # bytes轉字符串方式四 b=b'\xe9\x80\x86\xe7\x81haha\xab' string=b.decode('utf-8','replace') # 用?取代非法字符 print(string) # 字符串轉bytes方式一 str1='逆火' b=bytes(str1, encoding='utf-8') print(b) # 字符串轉bytes方式二 b=str1.encode('utf-8') print(b)