Python3字符串encode與decode的講解
大家好,很久沒更新了,也是年底了最近比較忙,同時也在研究python的其他內(nèi)容,畢竟是python小白,自學(xué)道路艱難。
好了今天和大家一起探討下python3編碼過程中對的一些轉(zhuǎn)碼事宜。
python3中對文本和二進制做了比較清晰的區(qū)分。python3默認編碼為unicode,由str類型進行表示。二進制數(shù)據(jù)使用byte類型表示,所以不會將str和byte混在一起。在實際應(yīng)用中我們經(jīng)常需要將兩者進行互轉(zhuǎn)
有幾點需要注意:
1:字符串通過編碼轉(zhuǎn)換為字節(jié)碼,字節(jié)碼通過解碼轉(zhuǎn)換為字符串
str--->(encode)--->bytes,bytes--->(decode)--->str
import sys
print('目前系統(tǒng)的編碼為:',sys.getdefaultencoding())
name='小明'
print(type(name))#首先我們來打印下轉(zhuǎn)碼前的name類型,因為它是str,所以可以通過encode來進行編碼
name1=name.encode('utf-8')
print(name1)
輸出為:
目前系統(tǒng)的編碼為: utf-8
<class 'str'>
b'\xe5\xb0\x8f\xe6\x98\x8e'
這里大家或許會有一個疑問,編碼utf-8為什么不是decode轉(zhuǎn)成unicode
因為開頭跟大家講過,python3默認就是unicode,utf-8可以看成是unicode的一個擴展集,所以其實name本身是一個unicode編碼的,所以可以通過encode編碼成utf-8,這里可以試下,如果認為name應(yīng)該是utf-8,那我們來試下encode會不會報錯
name1=name.decode('utf-8')
print(name1)
這里會報如下錯誤:
AttributeError: 'str' object has no attribute 'decode'
所以,對于python3默認的就是unicode編碼。
既然已經(jīng)encode成utf-8了,那我們來看下decode會出現(xiàn)什么樣的結(jié)果
name2=name1.decode('utf-8')
print(type(name2))
print(name2)
這里要跟大家說下,decode()括號中為什么寫utf-8,而不寫gbk,可以這樣理解,因為要解碼,你總得告訴它我是什么編碼的吧,比如我原先是utf-8格式的編碼,現(xiàn)在要解碼,但是如果冒充utf-8,說自己是gbk,那就會出現(xiàn)亂碼,見下:
<class 'str'>
<class 'str'>
灝忔槑
另外如果大家encode()和decode()括號中不寫編碼格式,系統(tǒng)會默認為utf-8,大家可以試下。
2:utf-8編碼格式和gbk編碼格式互轉(zhuǎn)
既然知道utf-8編碼與解碼的規(guī)律,那我們來試試它與gbk之間的火花。
name1=name.encode('utf-8')
name2=name1.decode('utf-8')
name3=name2.encode('gbk')
name4=name3.decode('gbk')
print(type(name3))
print(name3)
下面是name3的結(jié)果
<class 'bytes'>
b'\xd0\xa1\xc3\xf7'
下面是name4的結(jié)果
<class 'str'>
小明
從上面可以卡出name2本來是解碼成utf-8的,后來有隊name2進行了gbk編碼,接著又再次對name3進行g(shù)bk解碼
所以不難看出,其實utf-8和gbk之間都是通過unicode來做一個中間轉(zhuǎn)換的操作
在例子中
name2=name1.decode('utf-8')
name3=name2.encode('gbk')
這兩步的操作就是通過unicode來轉(zhuǎn)的
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
深度學(xué)習(xí)Tensorflow2.8?使用?BERT?進行文本分類
這篇文章主要為大家介紹了深度學(xué)習(xí)Tensorflow2.8?使用?BERT?進行文本分類示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01
jupyter notebook出現(xiàn)In[*]的問題及解決
這篇文章主要介紹了jupyter notebook出現(xiàn)In[*]的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09
Jupyter安裝拓展nbextensions及解決官網(wǎng)下載慢的問題
這篇文章主要介紹了Jupyter安裝拓展nbextensions及解決官網(wǎng)下載慢的問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03

