推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

android.util.Base64使用

   2023-07-17 网络整理佚名1270
核心提示:开发中有时会需要用到,首先说明是一种基于64个可打印字符来表示二进制数据的表示方法。URL和文件名安全方式,替换其中不符合url安全的字符如+和/将这几个结果放在在线工具里面解码,只有不能正常解码,会失败或者出现乱码,其余的都可以正常解码。在客户端里自己加解码,只要和使用对应的flag即可。防止乱码,所以不需要再处理+等字符,直接使用来。

.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请求,则需要在请求时指定参数和参数值。

参考链接

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON