输入字节数组在 40 处具有不正确的结束字节

2022-09-02 05:23:00

我有一个以 base64 编码的字符串。它看起来像这样:

eyJibGExIjoiYmxhMSIsImJsYTIiOiJibGEyIn0=

任何在线工具都可以将其解码为正确的字符串,即。但是,我的 Java 实现失败了:{"bla1":"bla1","bla2":"bla2"}

import java.util.Base64;
System.out.println("payload = " + payload);
String json = new String(Base64.getDecoder().decode(payload));

我收到以下错误:

payload = eyJibGExIjoiYmxhMSIsImJsYTIiOiJibGEyIn0=
java.lang.IllegalArgumentException: Input byte array has incorrect ending byte at 40

我的代码有什么问题?


答案 1

好的,我找到了。原始字符串在安卓设备上使用 进行编码。它使用编码方案。android.util.Base64Base64.encodeToString(json.getBytes("UTF-8"), Base64.DEFAULT);android.util.Base64.DEFAULT

然后在服务器端使用时,必须解码与java.util.Base64Base64.getMimeDecoder().decode(payload)Base64.getDecoder().decode(payload)


答案 2

我试图使用来自args的字符串。我发现,如果我使用它,它就会起作用。例如arg[0].trim()

Base64.getDecoder().decode(arg[0].trim());

我想有某种空白会让它变得混乱。


推荐