换行格式的Base64转换报错 "Illegal base64 character a"

场景

从一个远程请求拿到一个Base64字符串,直接用jdk的base64解码报错

java代码

String base64Str = "c2FtcGxlCWNocglzdGFydAllbmQJenZhbHVlCU5fd2luCWNudlR5cGUJb3JpZ2luCWZldGFsX2lu\n" +
                "dGVydmFsCWN5dG9iYW5kCWNudl9sZW4JZGlzZWFzZQlyZXBvcnQJdmFybGV2ZWwJYW5ub1Njb3Jl\n" +
                "CWFubm9DbGFzcwlhbm5vRXhwbGFpbgpSTlAwNDE0UUN3ZHhMMDFhCWNocjIxCTE1NDA5NDQzCTQ4\n" +
                "MDc1ODc3CTAuODQxCTEzMjYJRHVwCWZldGFsCVswLjEyOF8wLjQzNV0JMjFxMTEuMi1xMjIuMwkz\n" +
                "MjY2NjQzNAkyMeS4ieS9k+e7vOWQiOW+gQlZRVMJYW5lCTEuMAlQYXRob2dlbmljCeecgeeVpQo=";

System.out.println(Base64.getDecoder().decode(base64Str));

报错信息

Exception in thread "main" java.lang.IllegalArgumentException: Illegal base64 character a

实际的文件里存放的Base64如图,整整齐齐,复制到idea里面带有换行符

image-20220121135357279

解决方法

先来看下Base64的类解释,里面说jdk的base64有3种实现,根据不同协议选取。

换行格式的Base64转换报错

默认的Base64用的是basic,也就是基本的。如果是有换行符号的,应该有个选项可以设置成MINE的。

往下翻一下就能找到这个方法,可以解决带有换行的base64解码。

String result = Base64.getMimeDecoder().decode(base64Str);

找了下资料,jdk7以前的base64编码都是那种有换行的,jdk8以及以后的就不换行了。

你可能感兴趣的:(javabase64jdk8)