场景
从一个近程申请拿到一个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以及当前的就不换行了。