Base64编码出现换行符
原创 2020-03-31 11:49 阅读(2217)次
我有一个url图片地址,需要将他base64编码然后传给另一个服务,我本地一直是可以,将程序上传到linux服务器中一直发现图片出不来,看了下日志,base64编码后发现出来的数据多了换行符,如下:
地址:
kv://kv-face-video_face/2020/03/31/11/24/hmfdq-5439232d-8ab2-4403-8882-6b1d90fbeaee-1585625075325-1017433
base编码后值:
a3Y6Ly9rdi1mYWNlLXZpZGVvX2ZhY2UvMjAyMC8wMy8zMS8xMS8yNC9obWZkcS01NDM5MjMyZC04
YWIyLTQ0MDMtODg4Mi02YjFkOTBmYmVhZWUtMTU4NTYyNTA3NTMyNS0xMDE3NDMz
多了个换行。。
看了工具类下的base编码的方法:
public static String byteArrayToBase64Str(byte[] data) {
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(data).replaceAll("\r\n", "");
}
用的是sun.misc.BASE64Encoder进行编码,这个类base64编码后的值会带上换行符,windows下换行符与linux中不一样,windows \r\n ,linux中\n,于是就出现了我本地行,linux中运行出错了。具体原理,查看
于是修改了上面的工具类方法:
/**
* base64加密,并处理换行符的问题
* @param data
* @return
*/
public static String byteArrayToBase64Str(byte[] data) {
BASE64Encoder encoder = new BASE64Encoder();
String encode = encoder.encode(data);
encode = encode.replaceAll("\r\n", "");
encode = encode.replaceAll("\r", "");
encode = encode.replaceAll("\n", "");
return encode;
}
或者换用Apache的 commons-codec.jar, Base64.encodeBase64String(byte[])