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

标签 java base64 illegalargumentexception

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

eyJibGExIjoiYmxhMSIsImJsYTIiOiJibGEyIn0=

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

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

我的代码有什么问题?

最佳答案

好的,我知道了。原始字符串在 Android 设备上使用 android.util.Base64 通过 Base64.encodeToString(json.getBytes("UTF-8"), Base64.DEFAULT); 进行编码.它使用 android.util.Base64.DEFAULT 编码方案。

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

关于java - 输入字节数组在 40 处有不正确的结束字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35292836/

相关文章:

java - java 命令的 -jar 选项的真正作用是什么

java - Spring ResponseBodyEmitter 未在响应中设置 Content-Type header

java - 指定Java内存分配池地址

javascript - 将 dataURL(base64) 保存到 PhoneGap (android) 上的文件

java - CardLayout 喜欢向我抛出异常

java - 如何使用通用方法获取实例

linux - Base64解码有时在结果末尾有 "%"。是应该的结果吗?有什么解决办法吗?

javascript - Base64 Alfresco 上的 GET 请求

android - FileProvider 抛出 IllegalArgumentException

java - 获取错误 java.lang.IllegalArgumentException : unexpected url