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')
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)

  • 43
    点赞
  • 223
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
RSA是一种非对称加密算法,用于保护信息在网络上的传输安全。RSA算法的安全性基于大数分解问题,即一个大数能否被分解成两个较小的质数的乘积。以下是Python实现RSA加解密的示例代码: ```python from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5 import base64 # 生成RSA密钥对 key = RSA.generate(1024) # 获取公钥和私钥 private_key = key.export_key() public_key = key.publickey().export_key() # 将公钥和私钥保存到文件中 with open('private.pem', 'wb') as f: f.write(private_key) with open('public.pem', 'wb') as f: f.write(public_key) # 加密 def rsa_encrypt(message, public_key): rsa_key = RSA.import_key(public_key) cipher = PKCS1_v1_5.new(rsa_key) ciphertext = cipher.encrypt(message.encode(encoding='utf-8')) return base64.b64encode(ciphertext).decode() # 解密 def rsa_decrypt(ciphertext, private_key): rsa_key = RSA.import_key(private_key) cipher = PKCS1_v1_5.new(rsa_key) message = cipher.decrypt(base64.b64decode(ciphertext), None) return message.decode() # 测试加解密 message = 'hello world' ciphertext = rsa_encrypt(message, public_key) print('加密后:', ciphertext) plaintext = rsa_decrypt(ciphertext, private_key) print('解密后:', plaintext) ``` 在上面的代码中,首先使用RSA.generate()生成一个RSA密钥对,然后将公钥和私钥保存到文件中,接着定义了rsa_encrypt()和rsa_decrypt()函数分别用于加密和解密。最后通过测试加解密函数验证了算法的正确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白修炼晋级中

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值