很多时候我们读取数据容易看到的是乱码,因为编写这个文件的人为了存储、私密保存等原因会用utf-8、gbk、ASCII等进行编码。编码我们可以用encode方法,解码我们可以用decode方法。
目录
(2)用法:将目标字符串str编写为目标二进制数据bytes类型,即为编码过程。
(2)用法:将目标二进制数据bytes转为目标字符串str类型,即为解码过程。
(1)UnicodeEncodeError:因特殊符号在某编码不存在/不兼容而报错
(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')
d
3.常见报错和解决方法
(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的用法_python bs4「建议收藏」分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/85119.html