You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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错误。

正确的解决步骤

  1. 计算正确的padding数量:根据Base64规则,需要补充的等号数量公式为padding = (4 - len(data) % 4) % 4,这样只会补充0、1或2个等号,符合编码规范。
  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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 18:58:34