出现的问题
JDK8 调用 java.util.Base64解码时出现异常:java.lang.IllegalArgumentException: Illegal base64 character 20
原因
character 20 是空格,如果待解码的字符串没错,可能是遇到了编码标准的问题。 Base64有几个规范:
- RFC4648 / RFC2045 这两个规范规定encode后的字符包括:0-9,a-z,A-Z,+/
- RFC1521 这个规范除上述的0-9,a-z,A-Z,+/外,还包含空格符和换行符
JDK8的Base64遵守的是第一个无空格符和换行符的规范,所以遇到空格或换行会抛异常。
解决方法
知道了原因,解决起来就很简单了,换支持RFC1521标准的decoder解码就可以了,例如apache commons-codec。