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