如何用Python3实现Java的Base64解码功能并解决填充报错问题
错误原因
报错是因为Java的Base64.getDecoder()默认支持无填充的Base64串解码,而Python标准库的base64.b64decode默认执行严格的填充校验:标准Base64编码结果长度必须为4的整数倍,不足时用=补位,你使用的串/bCN99cbY13kwEf+wnRErg长度为22,缺少2个填充符=,因此触发填充校验错误。
解决方案
方案1:手动补全填充(兼容所有Python3版本)
通过规则计算需要补充的填充符数量,补全后再解码即可:
import base64 raw_str = "/bCN99cbY13kwEf+wnRErg" # 计算需要补充的填充符数量 padding_needed = (4 - len(raw_str) % 4) % 4 full_b64_str = raw_str + "=" * padding_needed # 按ISO_8859_1编码转字节后解码 decode_result = base64.b64decode(bytes(full_b64_str, encoding="iso-8859-1")) print(len(decode_result)) # 输出16
方案2:跳过填充校验(Python3.10及以上版本适用)
直接使用validate=False参数关闭填充校验,和Java默认逻辑完全对齐:
import base64 raw_str = "/bCN99cbY13kwEf+wnRErg" text = bytes(raw_str, encoding="iso-8859-1") decode_result = base64.b64decode(text, validate=False) print(len(decode_result)) # 输出16
内容的提问来源于stack exchange,提问作者sdfjl
相关产品推荐
相关产品推荐

