原文傳送門:請點擊
現在計算機中,在內存中采用unicode編碼方式。
可以看到上圖中,字節型數據t並沒有像想象中的一樣顯示0,1字符串。顯示仍然是b,這是因為t是采用utf-8來編碼,而utf-8與unicode編碼中的字符部分的編碼方式是一樣的,因此在顯示t的時候,在內存中采用unicode解碼,而兩種編碼方式的字符部分一樣,因此顯示並沒有什么區別。
在這幅圖中,可以直觀的看到t是0,1數據串,這里為了便於觀看,顯示的是16進制,utf-8與unicode漢字部分的編碼是不一樣的,unicode無法進行解碼,因此這里的t只能用0,1串來顯示。
在python3中提供了,encode()和decode()兩個函數,
encode()函數:將unicode編碼轉換成其他的編碼方式。
decode()函數:將其他編碼方式轉換成unicode編碼方式。
大家知道unicode的存儲效率低,會浪費很多空間,因此在保存文本時,很多時候並不是用unicode編碼方式,有很多其他的編碼,utf-8,gbk,還有日文,韓文編碼等,下面以讀取一個用utf-8的文本為例:
首先將utf-8轉換成unicode編碼方式,然后再來譯碼。
簡單來說,就是計算機內存中是以unicode編碼為橋梁的。
如果說從從其他編碼方式轉換成unicode這一過程出錯,就會產生亂碼,例如文本使用日文編碼保存的,你用gbk來解碼就會產生亂碼。