Python3.6中UTF-8字符串Base64解码报错Incorrect Padding求助
解决Base64解码时的
binascii.Error: Incorrect Padding错误 你碰到的这个填充错误,问题出在编码步骤的str()转换上。让我给你拆解一下:
base64.b64encode()本身返回的是bytes对象,比如b'aGFzbmkgemluZGEgaGEgdSBhcmUgbXkgbWFuIGJveSB5ZXMgdSBhcmUgIA=='- 你直接用
str()把这个bytes转成字符串时,会保留外层的b''标记,最终得到的字符串是"b'aGFzbmkgemluZGEgaGEgdSBhcmUgbXkgbWFuIGJveSB5ZXMgdSBhcmUgIA=='"。这串字符里的b'和末尾的'都是无效的Base64字符,解码时自然会触发填充错误。
修正方案
只需要把编码步骤里的str()替换成.decode('utf-8'),就能得到纯Base64格式的字符串:
正确的编码代码
import base64 # 用decode将bytes类型的Base64编码转换为纯字符串 a = base64.b64encode(bytes('hasni zinda ha u are my man boy yes u are ', "utf-8")).decode('utf-8') print('Encoding :' + a)
对应的解码代码
这时候再用你原来的解码逻辑就可以正常工作了:
b = base64.b64decode(a).decode("utf-8", "ignore") print('Decoding:' + b)
运行后你会看到编码后的结果是干净的Base64字符串,解码也能正确还原出原始文本。
内容的提问来源于stack exchange,提问作者Muhammad Hassan




