关于java:换行格式的Base64转换报错-Illegal-base64-character-a

36次阅读

共计 876 个字符,预计需要花费 3 分钟才能阅读完成。

场景

从一个近程申请拿到一个 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 外面带有换行符

解决办法

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

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

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

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

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

正文完
 0