Python中Base64解码报错:数据字符数不符合规则求助
解决Base64解码图片的报错问题
错误原因分析
- 第一个错误
Invalid base64-encoded string: number of data characters (13) cannot be 1 more than a multiple of 4:Base64编码字符串的长度必须是4的倍数,13除以4余1,不符合编码规则,导致解码失败。 - 第二个padding错误:你代码里强行给
data拼接3个等号("=" *3),但Base64的padding最多只能补2个等号,多余的等号会破坏编码结构,引发padding错误。
正确的解决步骤
- 计算正确的padding数量:根据Base64规则,需要补充的等号数量公式为
padding = (4 - len(data) % 4) % 4,这样只会补充0、1或2个等号,符合编码规范。 - 检查编码字符串是否有前缀:部分后端返回的Base64图片会带有
data:image/png;base64,这类前缀,必须先去除前缀再解码,否则也会引发错误。
修改后的代码
def call_dalle(url, text, num_images=1): data = {"text": text, "num_images": num_images} resp = requests.post(url + "/dalle", headers=headers, json=data) if resp.status_code == 200: return resp def create_and_show_images(text, num_images): valid = check_if_valid_backend(URL) if not valid: st.write("Backend service is not running") else: resp = call_dalle(URL, text, num_images) if resp is not None: for data in resp.json(): # 处理可能的base64前缀 if "," in data: data = data.split(",")[1] # 计算正确的padding数量 padding = (4 - len(data) % 4) % 4 img_data = base64.b64decode(data + "=" * padding) st.image(img_data)
额外检查项
- 确认后端返回的
data确实是纯Base64编码的图片数据,没有混入其他字符或格式错误。 - 如果还是报错,可以打印
data的内容和长度,排查是否存在编码传输过程中的截断或乱码问题。
内容的提问来源于stack exchange,提问作者Aymen Gadri
相关产品推荐
相关产品推荐

