如何在Python3中实现Base32编码?为何Python2方法在Python3失效?
Python 3 执行 Base32 编码报错?问题出在字符串类型的差异上!
刚遇到这个问题的时候我也懵过,其实核心原因就是 Python 2 和 Python 3 对字符串的处理逻辑完全不一样了。
先看 Python 2 为啥能跑通
在 Python 2.7 里,"abc" 这种字符串属于 str 类型,但它本质上就是字节序列(和 Python 3 里的 bytes 是一个东西)。base64.b32encode() 本来就需要处理字节数据,所以直接传字符串完全没问题:
import base64 print(base64.b32encode("abc")) # 输出 MFRGG===
那 Python 3 为啥报错?
Python 3 把文本字符串和字节序列严格分开了:
"abc"是str类型,代表 Unicode 文本,不是原始字节base64.b32encode()要求传入的是「类字节对象」(比如bytes、bytearray),所以直接传字符串就会触发TypeError,告诉你要传字节类型,不是字符串。
怎么解决?
很简单,把字符串转成字节序列就行,两种常用方法:
- 直接给字符串加
b前缀,定义成字节串:
import base64 print(base64.b32encode(b"abc")) # 输出 b'MFRGG==='
- 用
str.encode()方法把文本转成字节(一般用 UTF-8 编码):
import base64 print(base64.b32encode("abc".encode("utf-8"))) # 同样输出 b'MFRGG==='
要是你想把返回的字节结果转回普通字符串,用 bytes.decode() 就行:
encoded_bytes = base64.b32encode(b"abc") encoded_str = encoded_bytes.decode("utf-8") print(encoded_str) # 输出 MFRGG===
内容的提问来源于stack exchange,提问作者Saqib Ali
相关产品推荐
相关产品推荐

