Bitmap 转 Base64 字符串及转 Json 后新增换行符及部分符号被转义

问题描述

场景是 Android 与 H5 交互,将 Bitmap 格式图片转为 Base64 格式后通过调用 H5 的方法将数据传递给 H5,因为还包含其他信息,所以传递的参数是一个 Json 字符串,在通过 Gson 将我的对象转为 JsonObject 后,我发现 Base64 字符串增加了多了很多换行符,并将等号转义成了 ‘\u003d’,导致前端不能成功地渲染出图片。

解决方法
  • 解决增加换行符的问题

    我使用的是 android.util.Base64.encodeToString(input, Base64.DEFAULT) 方法将 Bitmap 转换为 Base64 字符串的,在这个工具中,转化后的 Base64 字符串每76个字符便会进行换行操作,由于在 Androidstudio 中换行符可以正确地 decode,所以不会出现问题,而其它平台可能无法对其进行正确地 decode 操作导致 Base64 不能还原,所以我们与其它平台对接时需按照下面的方式进行操作:

    android.util.Base64.encodeToString(input, Base64.NO_WRAP);
    

    可以看到第二个参数由 DEFAULT 变为了 NO_WRAP,下面是第二个参数代表的含义:

    flags含义
    DEFAULT默认模式
    CRLF指示行的编码器标志位用 CRLF 替代 LF
    NO_CLOSE传递给 Base64OutputStream 标记以指示它本身关闭时不应关闭它正在包装的输出流
    NO_PADDING省略末尾填充的 ’=’ 字符
    NO_WRAP省略所有的终止符
    URL_SAFEURL 和文件名安全方式,替换其中不符合 url 安全的字符如 + 和 /

    一般情况下,我们使用 android.util.Base64 进行转换时,只要 encode 和 decode 的 flag 相同,即可正确转换,但当与其它平台对接是,推荐使用 NO_WRAP

  • 解决 ‘=’ 被转义的问题

    在转 Json 时我的操作如下:

    val gson = Gson()
    val locationString = gson.toJson(location).toString()
    

    这样会将 ‘=’ 转义,解决办法如下:

    val gson = GsonBuilder().disableHtmlEscaping().create()
    val locationString = gson.toJson(location).toString()
    

    可以看到在创建 Gson 对象时有所区别,主要原因是 escapeHtmlChars 属性,该属性默认为 true,会将 html 中的字符例如 ‘<’, ’ >’ 这样的字符处理转义掉,设置为 false 后,就不会转义这些字符。

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈宇一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值