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输出流,依次将字节数组写入文件即可。