最近在项目中用到sun.misc.BASE64Encoder包的BASE64Encoder对字符串进行编码,但是将编码后的字符串输出后发现字符串中存在换行符"\n","\r"
控制台输出:
gCIJJnZf+6n/9qxmBEdTMbqR+AWLe4X3WDg3erV8M1yA2MsIHEtpf1r5lJZT9I0wWiMOyoUwGhTW
avmbwCGu3KiFRjBuYqoN/xvy677oIg/KHOb4i+ifidyjtYhe1JTjDc0hHlZNyyNNqn9U43XCH6tS
hEw/dfZBGyTQVHEt2kw=
实际输出应该是:
gCIJJnZf+6n/9qxmBEdTMbqR+AWLe4X3WDg3erV8M1yA2MsIHEtpf1r5lJZT9I0wWiMOyoUwGhTWavmbwCGu3KiFRjBuYqoN/xvy677oIg/KHOb4i+ifidyjtYhe1JTjDc0hHlZNyyNNqn9U43XCH6tShEw/dfZBGyTQVHEt2kw=
编码后出现了换行符;去除换行符 字符串正常解码
查询资料说:
根据RFC822规定,BASE64Encoder编码每76个字符,还需要加上一个回车换行
部分Base64编码的java库还按照这个标准实行
解决:
换一个Base64编码jar引入(或者string.replaceAll("\n", "").replaceAll("\r", "");个人不建议这样解决)