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

Java编码Base64后Python解码出现Incorrect padding错误求解决

解决Python解码Java编码消息的Padding错误问题

问题根源在于Java生成的JSON字符串格式与Python json.dumps() 的默认输出不一致,导致Base64编码后的内容虽然格式合法,但与Python端预期的输入不匹配。以下是具体调整方案:

调整Java编码逻辑

要让Python端正常解码,必须确保Java生成的JSON字符串与Python json.dumps() 的默认输出完全一致:Python默认会在键值对之间使用 : (冒号加空格),条目之间使用 , (逗号加空格),而Java标准JSONObject.toString()生成的是紧凑格式(无空格)。

方案1:手动构造匹配格式的JSON字符串(适合简单结构)

直接构造与Python输出一致的JSON字符串,再进行Base64编码:

import java.util.Base64;
import java.nio.charset.StandardCharsets;
import org.json.JSONObject;

public class MessageEncoder {
    public static void main(String[] args) {
        // 构造与Python json.dumps默认格式一致的JSON字符串
        String msgStr = "{\"name\": \"myName\", \"class\": \"myClass\"}";
        // 标准Base64编码(带自动填充=)
        String base64Data = Base64.getEncoder().encodeToString(msgStr.getBytes(StandardCharsets.UTF_8));
        // 组装最终消息
        JSONObject obj = new JSONObject();
        obj.put("data", base64Data);
        // 输出或传输obj.toString()
        System.out.println(obj.toString());
    }
}

方案2:使用JSON库生成匹配格式的字符串(适合复杂结构)

如果消息结构复杂,手动构造容易出错,可以用Gson库配置分隔符生成匹配格式的JSON:

import java.util.Base64;
import java.nio.charset.StandardCharsets;
import com.google.gson.stream.JsonWriter;
import java.io.StringWriter;
import org.json.JSONObject;

public class MessageEncoder {
    public static void main(String[] args) throws Exception {
        StringWriter sw = new StringWriter();
        JsonWriter writer = new JsonWriter(sw);
        writer.setIndent(""); // 禁用缩进,保持紧凑但带必要空格
        // 构造JSON对象
        writer.beginObject();
        writer.name("name").value("myName");
        writer.name("class").value("myClass");
        writer.endObject();
        writer.close();
        
        String msgStr = sw.toString(); // 生成与Python一致的JSON字符串
        String base64Data = Base64.getEncoder().encodeToString(msgStr.getBytes(StandardCharsets.UTF_8));
        
        JSONObject obj = new JSONObject();
        obj.put("data", base64Data);
        System.out.println(obj.toString());
    }
}

关键注意事项

  • 必须使用标准Base64编码器:Base64.getEncoder()(自动添加填充=),不要使用withoutPadding()模式,否则会触发Python端的binascii.Error。
  • 强制指定UTF-8编码:始终显式使用StandardCharsets.UTF_8,避免依赖系统默认编码导致字节数差异。

内容的提问来源于stack exchange,提问作者lakshmiravali rimmalapudi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 11:35:31