.util.use
有时在开发中也会使用它。 首先,它是一种基于64个可打印字符来表示二进制数据的表示方法。
.util下提供了一个工具类,可以方便的使用。 里面提供的方法如下
其中我们主要讲几个常见的flag及其含义
标志 描述 注释
为 / 标志。
默认模式
回车换行
行的标志位带有一对 CRLF 和一个 LF。
表示该行的编码器标志用CRLF替换为LF
传递到它未关闭的标志(当它关闭时)。
传递给标志以指示它所包装的输出流在其本身关闭时不应关闭
标志位省略末尾的“=”(如果有)。
省略末尾的填充“=”字符
标志位省略所有行(即,将在一根长行上)。
省略所有终止符
/ 标志位使用“URL 和安全”(请参阅 RFC 3548 4),其中使用 - 和 _ 代替 + 和 /。
URL和文件名安全方式,替换+、/等不符合url安全的字符
应该注意的是,在 .util 中发现了以下一行注释。 源代码
总体思路是**超过76个字符会自动换行**
连接其他平台时,有些平台可能无法修正换行后的字符串,所以需要
将要
android.util.base64.encodeToString(input, base64.DEFAULT);
用。。。来代替
android.util.base64.encodeToString(input, base64.NO_WRAP);
让我们写一个简单的例子来比较,,和,看看差异
String str = "qwertyuiopasdfghjklzxcvbnm0123456789~!@#$%^&*()_+`¥……——+|《》?,./城市 姓名";
byte[] byteStr = str.getBytes("utf-8");
String encode_DEFAULT = base64.encodeToString(byteStr,base64.DEFAULT);
String encode_NO_PADDING = base64.encodeToString(byteStr,base64.NO_PADDING);
String encode_NO_WRAP = base64.encodeToString(byteStr,base64.NO_WRAP);
String encodeURL_SAFE = base64.encodeToString(byteStr,base64.URL_SAFE);
打印结果
作为比较,我们可以看到
只需去掉最后自动补全的=号即可
换行符被删除,输出始终是整行
将结果中的 + 更改为 -
将这些结果放到在线工具中进行解码,只有无法正常解码的情况下才会失败或者出现乱码,其余的都可以正常解码。查看.util的源码。 当你发现工具里只有区别和其他的时候
((flags & URL_SAFE) == 0) ? DECODE : DECODE_WEBSAFE;
因此,经过测试可以发现,当使用non时,可以通过如下方式进行解码
android.util.base64.decode(input, base64.DEFAULT);
使用时只能通过 来解码。
android.util.base64.decode(input, base64.URL_SAFE);
总结:
1、自己在客户端添加解码,只要使用对应的flag即可。 当标志为 . 时,标志必须为 .
2、如果需要与第三方连接,因为一般第三方HTTP请求都会主动防止参数和参数值出现乱码,所以不需要对+等字符进行处理,直接使用。 如果是自封装的没有参数和参数值的http请求,则需要在请求时指定参数和参数值。
参考链接