Base64编码出现换行符

原创 2020-03-31 11:49 阅读(275)次

我有一个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[])