Python編碼解碼之encode()函數(shù)詳解
encode
encode() 可以對字符串進(jìn)行「編碼」,常用來對「中文」字符串進(jìn)行編碼,以解決「亂碼」問題。
語法
string.encode( encoding, errors )
參數(shù)
- encodeing :(可選)指定編碼,默認(rèn) UTF-8
- errors :(可選)設(shè)置錯誤處理方式,默認(rèn)
返回值
- 返回編碼后的「新字符串」
實例:對字符串進(jìn)行GBK編碼
str1 = 'hello'
print(str1.encode('gbk'))輸出:
b'hello'
1、常見編碼格式
- ASCLL:美國早期制定的編碼規(guī)范,只能表示128個字符。
- GB2312:中國在ASCLL基礎(chǔ)上對中文進(jìn)行擴展,可以表示6763個漢字符號。
- GBK:對GB2312的進(jìn)一步擴展(K指擴),收錄了21886個漢字符號。
- GB18030:對GBK再一次擴充,收錄了70244個漢字符號。
- Unicode:字符集,包含了世界上目前所有的符號,全球的所有文字都可以解析,字符是定長的,統(tǒng)一為16位
- UTF-8:使用最廣的一種Unicode的實現(xiàn)方式,每次8個位傳輸數(shù)據(jù);體積太大,國內(nèi)通常使用GBK。
- UTF-16:Unicode的另一種實現(xiàn)方式,每次傳輸16位數(shù)據(jù)
各個編碼實例:
print('hello'.encode('gb2312'))
print('hello'.encode('gbk'))
print('hello'.encode('gb18030'))
print('hello'.encode('utf8'))
print('hello'.encode('utf16'))輸出:
b'hello'
b'hello'
b'hello'
b'hello'
b'\xff\xfeh\x00e\x00l\x00l\x00o\x00'
仔細(xì)觀察返回結(jié)果就會發(fā)現(xiàn),字符串前面都加了個b,接下來我們了解一下這是什么含義。
2、返回的是Bytes類型
encode() 編碼后會返回一個「Bytes類型」的結(jié)果,而不是「str類型」
str1 = 'hello' print(type(str1)) print(type(str1.encode()))
輸出:
<class 'str'>
<class 'bytes'>
bytes 和 str 都屬于字符串類型:
- str 以Unicode code points形式存儲(人認(rèn)識的形式)
- bytes 以byte形式存儲(機器認(rèn)識的形式)
bytes 是一個「二進(jìn)制」序列對象,定義時在字符串前面加上b(英文可以,中文需要先encode)
str1 = b'hello' print(type(str1))
輸出:
<class 'bytes'>
3、錯誤處理方式
encode() 在編碼時,經(jīng)常會遇到「無法編碼」的字符,這時就可以用 errors 設(shè)置適當(dāng)?shù)奶幚矸绞剑?/p>
- strict:失敗時引發(fā)錯誤
- ignore:忽略無法編碼的字符
- backslashreplace:用反斜杠替換無法編碼的字符
- namereplace:用解釋字符的文本替換無法編碼的字符
- replace:用問號替換無法編碼的字符
- xmlcharrefreplace:用xml字符替換字符
如果給「兩個參數(shù)」,可以自動按順序復(fù)制給參數(shù);如果只給「一個參數(shù)」,需要用參數(shù)名指定。
print('hello'.encode('gbk', 'strict'))
print('hello'.encode(errors='ignore'))
print('hello'.encode(errors='backslashreplace'))
print('hello'.encode(errors='namereplace'))
print('hello'.encode(errors='replace'))
print('hello'.encode(errors='xmlcharrefreplace'))4、解碼
decode() 會將「bytes類型」轉(zhuǎn)成「str類型」,這意味著它只能解碼bytes類型的字符串,解碼str類型的字符串會報錯 AttributeError: ‘str’ object has no attribute ‘decode’

bytes類型格式是 b'xxx',如果只有str形式的字符串(比如 '\xe5\xbc\xa0\xe4\xb8\x89'),可以在前面加上b,變成bytes類型,再進(jìn)行解碼
print(b'\xe5\xbc\xa0\xe4\xb8\x89'.decode())
輸出:
張三
總結(jié)
到此這篇關(guān)于Python編碼解碼之encode()函數(shù)的文章就介紹到這了,更多相關(guān)Python encode()函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python opencv 讀取圖片 返回圖片某像素點的b,g,r值的實現(xiàn)方法
今天小編就為大家分享一篇python opencv 讀取圖片 返回圖片某像素點的b,g,r值的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07
Python基礎(chǔ)教程之元組的定義與不可變特性(對比列表)
元組的魅力在于它的簡單性和明確性,它不追求成為全能數(shù)據(jù)結(jié)構(gòu),而是專注于做好一件事,就是提供不可變的有序集合,這篇文章主要介紹了Python基礎(chǔ)教程之元組的定義與不可變特性(對比列表)的相關(guān)資料,需要的朋友可以參考下2026-05-05
python 在指定范圍內(nèi)隨機生成不重復(fù)的n個數(shù)實例
今天小編就為大家分享一篇python 在指定范圍內(nèi)隨機生成不重復(fù)的n個數(shù)實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01
python調(diào)用函數(shù)、類和文件操作簡單實例總結(jié)
這篇文章主要介紹了python調(diào)用函數(shù)、類和文件操作,結(jié)合簡單實例形式總結(jié)分析了Python調(diào)用函數(shù)、類和文件操作的各種常見操作技巧,需要的朋友可以參考下2019-11-11

