1、后台请求的Base64的数据,安卓客户端只是做转接作用,比如后台请求到调用中国银行app的Base64数据,要调用中国银行app,在转接数据启动中国银行app时候,app解析数据出错,原因就是转接过程中Base64数据被增加了换行 \n

地址: 安卓调用中国银行参数Base64值数据解析异常

2、手机拍照身份证时候,把图片用Base64转换一下,如果用的DEFAULT时候,数据里面也有换行

ByteArrayOutputStream baos = new ByteArrayOutputStream();
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
                byte[] datas = baos.toByteArray();
                String imageDatasString = Base64.encodeToString(datas, Base64.DEFAULT);

Base64编码,发现编码后总是有换行,google后发现字符串过长(一般超过76)时会自动在中间加一个换行符,不能使用默认设置,改为NO_WRAP就可以了

android.util.Base64.encodeToString(string.getBytes(), Base64.NO_WRAP);

注1:Base64几个参数说明

CRLF 这个参数看起来比较眼熟,它就是Win风格的换行符,意思就是使用CR LF这一对作为一行的结尾而不是Unix风格的LF DEFAULT 这个参数是默认,使用默认的方法来加密 NO_PADDING 这个参数是略去加密字符串最后的”=” NO_WRAP 这个参数意思是略去所有的换行符(设置后CRLF就没用了) URL_SAFE 这个参数意思是加密时不使用对URL和文件名有特殊意义的字符来作为加密字符,具体就是以-和_取代+和/

注2:深层次原因

Base64是一种字符串编码格式,Base64采用A-Z a-z 0-9 “+“ “/“这一共64个字符来编码原始字符(还有垫字符“=“)。一个字符本身是1个字节,也就是8位,而Base64编码后的一个字符只能表示能表示6位的信息。也就是原始字符串中3字节的信息编码会变成4字节的信息。Base64的主要作用是满足MIME传输需求,在传输过程中都是用ASCII支持的可见字符。Base64是基于字节的编码,所以不同字符集下的相同字符在Base64下可能有着不同编码。根据RFC822规定,BASE64Encoder编码每76个字符,还需要加上一个回车换行 部分Base64编码的java库还按照这个标准实行,所以会有又换行符。

android 开发中有时会需要用到 base64 加解密,其实 base64 并不算是一种加密的算法,只是一种基于64个可打印字符来表示二进制数据的表示方法。 google在 android .util下提供了一个 Base64 工具类,可以很方便的用它encode和decode,里面提供了一些经典的常用算法。 此程序为改方法完整Java代码,可以直接运行或者调用。 s = s.replaceAll("\r\n", ""); 或者以下也可以 https://blog.csdn.net/wsjzzcbq/article/details/82869193 对 json 数据进行了 Base64 加密,然后将加密后的字符串提交到接口,服务端解析失败(服务端 .NET)。 对比后发现,字符串的某些位置被自动添加了 换行符 \n,应该是 Android Studio 对过长字符串进行了处理。 所以提交前需要手动去除 换行符 \n 。 正常加密后的字符串: eyJ2ZXIiOiIxLjAuNiIsImRhdGEiOnsicGFzc... data:text/html; base64 , base64 编码 的HTML代码 data:text/css,CSS代码 data:text/css; base64 , base64 编码 的CSS代码 最近在项目中用到sun.misc. BASE64 Encoder包的 BASE64 Encoder对字符串进行 编码 ,但是将 编码 后的字符串输出后发现字符串中存在 换行符 "\n","\r" 控制台输出: gCIJJnZf+6n/9qxmBEdTMbqR+AWLe4X3WDg3erV8M1yA2MsIHEtpf1r5lJZT9I0wWiMOyoUwGhTW avmbwCGu3KiFRjBuYqoN/xv... 近几天开发一个上传照片,然后比对新旧照片相似度的功能,我把照片加密后的字符串打出到控制台,然后复制到测试类,测试就没问题,可是加密后的字符串直接做参数接口就报参数错误问题,搜了好多文章,终于发现一篇好文章,说的正是我的问题。 BASE64 加密字符串,当 编码 的字节较长时,encode出来的字符串会自动加入\r\n 进行自动 换行 。针对这个问题,原因是rfc规范规定76个字符换一次行。 我们可以使用... 后台返回的图片格式是 base64 格式的字符串如下面这些(我这里只截取了前面的一部分) data:image/png; base64 ,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBg... 如何才能将超大 base64 解析为文件呢,只需要将超大 base64 字符串按照4的倍数进行截取后,再进行解码,然后通过FileOutputStream输出流,依次将字节数组写入文件即可。