「作者主頁(yè)」:士別三日wyx
「作者簡(jiǎn)介」:CSDN top100、阿里云博客專(zhuān)家、華為云享專(zhuān)家、網(wǎng)絡(luò)安全領(lǐng)域優(yōu)質(zhì)創(chuàng)作者
「推薦專(zhuān)欄」:小白零基礎(chǔ)《Python入門(mén)到精通》
encode() 可以對(duì)字符串進(jìn)行「編碼」,常用來(lái)對(duì)「中文」字符串進(jìn)行編碼,以解決「亂碼」問(wèn)題。
語(yǔ)法
string.encode( encoding, errors )
參數(shù)
- encodeing :(可選)指定編碼,默認(rèn) UTF-8
- errors :(可選)設(shè)置錯(cuò)誤處理方式,默認(rèn)
返回值
- 返回編碼后的「新字符串」
實(shí)例:對(duì)字符串進(jìn)行GBK編碼
str1 = 'hello'
print(str1.encode('gbk'))
輸出:
b'hello'
1、常見(jiàn)編碼格式
- ASCLL:美國(guó)早期制定的編碼規(guī)范,只能表示128個(gè)字符。
- GB2312:中國(guó)在ASCLL基礎(chǔ)上對(duì)中文進(jìn)行擴(kuò)展,可以表示6763個(gè)漢字符號(hào)。
- GBK:對(duì)GB2312的進(jìn)一步擴(kuò)展(K指擴(kuò)),收錄了21886個(gè)漢字符號(hào)。
- GB18030:對(duì)GBK再一次擴(kuò)充,收錄了70244個(gè)漢字符號(hào)。
- Unicode:字符集,包含了世界上目前所有的符號(hào),全球的所有文字都可以解析,字符是定長(zhǎng)的,統(tǒng)一為16位
- UTF-8:使用最廣的一種Unicode的實(shí)現(xiàn)方式,每次8個(gè)位傳輸數(shù)據(jù);體積太大,國(guó)內(nèi)通常使用GBK。
- UTF-16:Unicode的另一種實(shí)現(xiàn)方式,每次傳輸16位數(shù)據(jù)
各個(gè)編碼實(shí)例:
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é)果就會(huì)發(fā)現(xiàn),字符串前面都加了個(gè)b,接下來(lái)我們了解一下這是什么含義。
2、返回的是Bytes類(lèi)型
encode() 編碼后會(huì)返回一個(gè)「Bytes類(lèi)型」的結(jié)果,而不是「str類(lèi)型」
str1 = 'hello'
print(type(str1))
print(type(str1.encode()))
輸出:
<class 'str'>
<class 'bytes'>
bytes 和 str 都屬于字符串類(lèi)型:
- str 以Unicode code points形式存儲(chǔ)(人認(rèn)識(shí)的形式)
- bytes 以byte形式存儲(chǔ)(機(jī)器認(rèn)識(shí)的形式)
bytes 是一個(gè)「二進(jìn)制」序列對(duì)象,定義時(shí)在字符串前面加上b(英文可以,中文需要先encode)
str1 = b'hello'
print(type(str1))
輸出:
<class 'bytes'>
3、錯(cuò)誤處理方式
encode() 在編碼時(shí),經(jīng)常會(huì)遇到「無(wú)法編碼」的字符,這時(shí)就可以用 errors 設(shè)置適當(dāng)?shù)奶幚矸绞剑?/p>
- strict:失敗時(shí)引發(fā)錯(cuò)誤
- ignore:忽略無(wú)法編碼的字符
- backslashreplace:用反斜杠替換無(wú)法編碼的字符
- namereplace:用解釋字符的文本替換無(wú)法編碼的字符
- replace:用問(wèn)號(hào)替換無(wú)法編碼的字符
- xmlcharrefreplace:用xml字符替換字符
如果給「兩個(gè)參數(shù)」,可以自動(dòng)按順序復(fù)制給參數(shù);如果只給「一個(gè)參數(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() 會(huì)將「bytes類(lèi)型」轉(zhuǎn)成「str類(lèi)型」,這意味著它只能解碼bytes類(lèi)型的字符串,解碼str類(lèi)型的字符串會(huì)報(bào)錯(cuò) AttributeError: ‘str’ object has no attribute ‘decode’
bytes類(lèi)型格式是 b'xxx'
,如果只有str形式的字符串(比如 '\xe5\xbc\xa0\xe4\xb8\x89'
),可以在前面加上b,變成bytes類(lèi)型,再進(jìn)行解碼文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-543187.html
print(b'\xe5\xbc\xa0\xe4\xb8\x89'.decode())
輸出:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-543187.html
張三
到了這里,關(guān)于Python encode()函數(shù)詳解,Python編碼解碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!