
現(xiàn)在計(jì)算機(jī)中,在內(nèi)存中采用unicode編碼方式。

可以看到上圖中,字節(jié)型數(shù)據(jù)t并沒(méi)有像想象中的一樣顯示0,1字符串。顯示仍然是b,這是因?yàn)閠是采用utf-8來(lái)編碼,而utf-8與unicode編碼中的字符部分的編碼方式是一樣的,因此在顯示t的時(shí)候,在內(nèi)存中采用unicode解碼,而兩種編碼方式的字符部分一樣,因此顯示并沒(méi)有什么區(qū)別。

在這幅圖中,可以直觀的看到t是0,1數(shù)據(jù)串,這里為了便于觀看,顯示的是16進(jìn)制,utf-8與unicode漢字部分的編碼是不一樣的,unicode無(wú)法進(jìn)行解碼,因此這里的t只能用0,1串來(lái)顯示。
在python3中提供了,encode()和decode()兩個(gè)函數(shù),
encode()函數(shù):將unicode編碼轉(zhuǎn)換成其他的編碼方式。
decode()函數(shù):將其他編碼方式轉(zhuǎn)換成unicode編碼方式。

大家知道unicode的存儲(chǔ)效率低,會(huì)浪費(fèi)很多空間,因此在保存文本時(shí),很多時(shí)候并不是用unicode編碼方式,有很多其他的編碼,utf-8,gbk,還有日文,韓文編碼等,下面以讀取一個(gè)用utf-8的文本為例:
首先將utf-8轉(zhuǎn)換成unicode編碼方式,然后再來(lái)譯碼。
簡(jiǎn)單來(lái)說(shuō),就是計(jì)算機(jī)內(nèi)存中是以u(píng)nicode編碼為橋梁的。

如果說(shuō)從從其他編碼方式轉(zhuǎn)換成unicode這一過(guò)程出錯(cuò),就會(huì)產(chǎn)生亂碼,例如文本使用日文編碼保存的,你用gbk來(lái)解碼就會(huì)產(chǎn)生亂碼。