GeXiangDong

精通Java、SQL、Spring的拼写,擅长Linux、Windows的开关机

0%

Base64 java.lang.IllegalArgumentException: Illegal base64 character 20

出现的问题

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。