python的encode()和decode()的用法及实例
很多時(shí)候我們讀取數(shù)據(jù)容易看到的是亂碼,因?yàn)榫帉戇@個(gè)文件的人為了存儲(chǔ)、私密保存等原因會(huì)用utf-8、gbk、ASCII等進(jìn)行編碼。編碼我們可以用encode方法,解碼我們可以用decode方法。
目錄
1.encode函數(shù)的用法及實(shí)例
(1)encode()的語(yǔ)法
(2)用法:將目標(biāo)字符串str編寫為目標(biāo)二進(jìn)制數(shù)據(jù)bytes類型,即為編碼過(guò)程。
(3)實(shí)例
①轉(zhuǎn)為目標(biāo)bytes類型
②查看返回類型
2.decode函數(shù)的用法及實(shí)例
(1)decode()的語(yǔ)法
(2)用法:將目標(biāo)二進(jìn)制數(shù)據(jù)bytes轉(zhuǎn)為目標(biāo)字符串str類型,即為解碼過(guò)程。
(3)實(shí)例
?編輯
3.常見(jiàn)報(bào)錯(cuò)和解決方法?
(1)UnicodeEncodeError:因特殊符號(hào)在某編碼不存在/不兼容而報(bào)錯(cuò)
①UnicodeEncodeError報(bào)錯(cuò)
②UnicodeDecodeError報(bào)錯(cuò)
(3)AttributeError: 'str' object has no attribute 'decode'
1.encode函數(shù)的用法及實(shí)例
(1)encode()的語(yǔ)法
str.encode([encoding="utf-8"][,errors="strict"])
參數(shù)說(shuō)明:
str:表示需要編碼的字符串,用引號(hào)引開(kāi)。
encoding="utf-8":參數(shù)可選寫,默認(rèn)編寫為"utf-8",常用的是utf-8,保存為中文形式可直接寫為"gbk",簡(jiǎn)體中文為"gb2313"。
errors="strict":參數(shù)可選,默認(rèn)為"strict",表示不兼容則報(bào)錯(cuò)。
指定錯(cuò)誤處理方式,其可選擇值可以是:
strict:遇到非法字符就拋出異常。
ignore:忽略非法字符。
replace:用“?”替換非法字符。
xmlcharrefreplace:使用 xml 的字符引用。
(2)用法:將目標(biāo)字符串str編寫為目標(biāo)二進(jìn)制數(shù)據(jù)bytes類型,即為編碼過(guò)程。
(3)實(shí)例
①轉(zhuǎn)為目標(biāo)bytes類型
#定義str str = '我愛(ài)我的強(qiáng)大的國(guó)家——中國(guó)'#①默認(rèn)編碼類型utf-8和報(bào)錯(cuò)方式為strict a = str.encode() a#②編碼類型為‘gbk’和默認(rèn)報(bào)錯(cuò)方式為strict b = str.encode(encoding='gbk') b#④編碼類型為‘gb18030’和默認(rèn)報(bào)錯(cuò)方式為strict c = str.encode(encoding='gb18030') c#⑤編碼類型為‘gbk’和默認(rèn)報(bào)錯(cuò)方式為ignore e = str.encode(encoding='gb2312',errors ='ignore') e?
②查看返回類型
type(str.encode(encoding='gb18030'))返回結(jié)果為 :bytes
2.decode函數(shù)的用法及實(shí)例
(1)decode()的語(yǔ)法
bytes.decode([encoding="utf-8"][,errors="strict")
參數(shù)說(shuō)明:
bytes:表示要進(jìn)行轉(zhuǎn)換的二進(jìn)制數(shù)據(jù)。
encoding="utf-8":參數(shù)可選寫,默認(rèn)編寫為"utf-8",常用的是utf-8,解碼為中文形式可直接寫為"gbk",簡(jiǎn)體中文為"gb2313"。
errors="strict":參數(shù)可選,默認(rèn)為"strict",表示不兼容則報(bào)錯(cuò)。
指定錯(cuò)誤處理方式,其可選擇值可以是:
strict:遇到非法字符就拋出異常。
ignore:忽略非法字符。
replace:用“?”替換非法字符。
xmlcharrefreplace:使用 xml 的字符引用。
(2)用法:將目標(biāo)二進(jìn)制數(shù)據(jù)bytes轉(zhuǎn)為目標(biāo)字符串str類型,即為解碼過(guò)程。
(3)實(shí)例
#解碼decode #定義str str = '我愛(ài)我的強(qiáng)大的國(guó)家——中國(guó)'#解碼utf-8類型 #定義bs bs=str.encode() #默認(rèn)utf-8類型的bytes a = bs.decode() a#解碼gb18030類型 #①解碼為gb18030 bs=str.encode(encoding='gb18030') #默認(rèn)utf-8類型的bytes b = bs.decode(encoding='gb18030') b#②解碼為gbk c = bs.decode(encoding='gbk') c#③解碼為gb2312 d = bs.decode(encoding='gb2312') d3.常見(jiàn)報(bào)錯(cuò)和解決方法?
(1)UnicodeEncodeError:因特殊符號(hào)在某編碼不存在/不兼容而報(bào)錯(cuò)
①UnicodeEncodeError報(bào)錯(cuò)
UnicodeEncodeError: 'gb2312' codec can't encode character '\u2014' in position 9: illegal multibyte sequence
報(bào)錯(cuò)原因:一些特殊符號(hào)在編碼的gb2312中不存在無(wú)法編碼。圖中不存在的是“——”,所以報(bào)錯(cuò)顯示第9+1的位置存在不能編寫為“gb2312”的字符,所以報(bào)錯(cuò)。
解決辦法1:將 'gb2312'改成兼容更多的編碼比如gbk或者gb18030。所以,此種情況,可以嘗試用和當(dāng)前編碼(gb2312)兼容的但所包含字符更多的編碼(gb18030)去解碼。
兼容性:gb2312<gbk<gb18030
解決辦法2:一種忽略錯(cuò)誤的方法是將errors報(bào)錯(cuò)方式設(shè)置為“ignore”,但是一般不選擇這個(gè)方法。
②UnicodeDecodeError報(bào)錯(cuò)
UnicodeDecodeError: 'gb18030' codec can't decode byte 0x80 in position 28: illegal multibyte sequence原因:utf-8編碼存在特殊的字符‘gb18030’的編碼不存在就會(huì)報(bào)錯(cuò)。
解決方法1:解碼用之前編碼的語(yǔ)言,對(duì)于不是自己編碼的一般‘utf-8’更常用,可以用‘utf-8’嘗試去解碼。
解決方法2:一種忽略錯(cuò)誤的方法是將errors報(bào)錯(cuò)方式設(shè)置為“ignore”,但是一般不選擇這個(gè)方法。
(3)AttributeError: 'str' object has no attribute 'decode'
解決方法:str.encode().decode()? 即需要先編碼再解碼。
小劇場(chǎng) :最近太忙了,都沒(méi)時(shí)間更新博文,今天乘有時(shí)間趕緊更新一個(gè)博文分享我的學(xué)習(xí)小總結(jié)并鞏固一下這些知識(shí)點(diǎn)。家人們對(duì)我的分享有什么建議可以留言和我說(shuō)哦~
?
參考文獻(xiàn):Python encode()和decode()方法:字符串編碼轉(zhuǎn)換 (biancheng.net)
總結(jié)
以上是生活随笔為你收集整理的python的encode()和decode()的用法及实例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【好题分享】适合c++初学者(从易到难)
- 下一篇: 数据结构习题及解析三