溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Python中unicode和utf8是什么

發(fā)布時(shí)間:2021-11-25 13:45:30 來(lái)源:億速云 閱讀:251 作者:小新 欄目:大數(shù)據(jù)

這篇文章主要介紹了Python中unicode和utf8是什么,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

 

中文亂碼、unicode和utf8

 

編碼演化史

 
ASCII編碼

在很久很久以前,美國(guó)人發(fā)明了計(jì)算機(jī),計(jì)算機(jī)只能處理數(shù)字也就是把文字轉(zhuǎn)換為8個(gè)bit也就是一個(gè)字節(jié),8個(gè)bit最大能表示的數(shù)字為255,而[A-Z]、[a-z]、[0-9]再加上鍵盤(pán)上的一些符號(hào)正好255個(gè),所以ASCII編碼就成為了美國(guó)人的標(biāo)準(zhǔn)編碼(用一個(gè)字節(jié)代表一個(gè)字母或者符號(hào)),正好也滿(mǎn)足了美國(guó)人的需求。

 
GB2312

有了上面的情況,我大中國(guó)表示不服,我們中國(guó)漢字博大精深,255個(gè)明顯是滿(mǎn)足不了我們的需求的,于是我們就發(fā)明了GB2312編碼(用兩個(gè)字節(jié)表示漢字),不僅包含了ASCII碼還能表示我們的中國(guó)的漢字,于是有了我們中國(guó)的例子,世界各國(guó)紛紛研究出了支持自己語(yǔ)言的編碼,在這種情況下多種語(yǔ)言混合顯示就出現(xiàn)了亂碼的情況了,對(duì)于這種情況就出現(xiàn)了unicode編碼將所有語(yǔ)言統(tǒng)一到一起。

 
unicode

unicode編碼的出現(xiàn)解決了多國(guó)語(yǔ)言展示亂碼的問(wèn)題,但是unicode的解決方案在全英文文檔展示的情況下,unicode編碼會(huì)比ASCII編碼多一倍的存儲(chǔ)空間(unicode的編碼是16bit的,在表示ASCII編碼時(shí)是直接在前面加上8個(gè)0)相應(yīng)的在傳輸?shù)臅r(shí)候就多了一倍的傳輸時(shí)間,在這種情況下就出現(xiàn)了UTF8編碼。

 
UTF8

UTF8編碼相比于8bit的ASCII編碼和16bit的unicode編碼來(lái)說(shuō),UTF8編碼是不定長(zhǎng)的,它可以使用兩個(gè)字節(jié)代表英文,用三個(gè)字節(jié)代表中文,UTF8這個(gè)時(shí)候優(yōu)勢(shì)就很大了,在實(shí)際運(yùn)用中,我們可以將文件編碼互相轉(zhuǎn)換以獲取最大化的利用內(nèi)存,把文件保存在內(nèi)存中我們采用內(nèi)存占用更小的UTF8編碼的格式,讀寫(xiě)文件時(shí)我們采用更大更全的unicode編碼,具體實(shí)例圖如下:

Python中unicode和utf8是什么  
示例圖
 

代碼演示

 
Python2.7
 
windows
Python中unicode和utf8是什么  

在python2.7中當(dāng)要將字符串encode為utf8,我們需要確保之前的字符串的編碼方式為unicode,所以當(dāng)字符串編碼不為unicode時(shí),我們需要使用decode方法,而在使用decode方法時(shí)我們需要指明原有字符串的編碼格式(在windows系統(tǒng)中解釋器默認(rèn)編碼為GB2312,Linux系統(tǒng)中為UTF-8編碼),所以就有了  s.decode("gb2312").encode("utf-8")。  
 
Python中unicode和utf8是什么  
decode示意圖
 
Linux

按照上面解讀,我們?cè)贚inux系統(tǒng)下操作如下:

Python中unicode和utf8是什么  

這里就有一個(gè)疑問(wèn)既然原有系統(tǒng)默認(rèn)的字符串編碼為utf-8,為什么不可以直接使用s.decode().encode('utf-8')?原因就是,如若不指定原有的系統(tǒng)編碼格式(utf-8),Linux系統(tǒng)下會(huì)調(diào)用python解釋器的默認(rèn)編碼ASCII解析字符串,演示如下:  
 
Python中unicode和utf8是什么  

所以在根據(jù)上面的情況,在python2中出現(xiàn)編碼互轉(zhuǎn)的情況,可以參考下圖:  
 
Python中unicode和utf8是什么  
 
Python3.6

Python2.7和Python3.6最大的區(qū)別就是在執(zhí)行Python2.7項(xiàng)目時(shí),當(dāng)項(xiàng)目中包含漢字時(shí),需要在文件頭聲明編碼格式,否則項(xiàng)目中的中文顯示就是亂碼。
而在Python3中完全沒(méi)有這樣的顧慮,那是因?yàn)槟J(rèn)python3中全部的字符串就是unicode可以直接使用encode方法。

Python中unicode和utf8是什么  


感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Python中unicode和utf8是什么”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI