简介

  • Base64编码是一种编码方式,可以把二进制数据编码为可见的字符数据,包含64个字符,A-Z, a-z,0-9,+,/,除此之外还有一个填充字符是后缀等号'='。
  • 由于Base64编码是六位一个字符,而一个字节占八位,所以编码的时候如果字节不是三的倍数,需要添加零值,注意,由于一个字节占六位,所以编码之后高两位会补0。
  • 如Xu
X u 零值
01011000 01110101 00000000

编码后六位一个字符,高两位补0,为WHU=,其中=为零值。

特性

  • 标准Base64编码包含64个字符A-Z, a-z,0-9,+,/,=
  • url safe的Base64编码将+,/换成-,_
  • 三个字符会变成四个字符
  • 解码Base64编码时,遇到=即可知道字符结束
  • 每76个字符增加一个换行符

作用

  • Base64编码的作用是将不可见字符转为可见字符,因为数据在传输的时候,各个设备处理字符的规则不同,为了避免不可见字符被过滤,采用Base64编码,可以统统转化为可见字符,减少这种情况的发生。
  • 可以用作编码图片或者附件的源文件,这样可以直接在网页看到图片,而不需将图片放在服务器上。

代码实现

  • java 标准Base64
     String encodeResult = java.util.Base64.getEncoder().encodeToString("???".getBytes());System.out.println(encodeResult);输出结果为Pz8/
复制代码
  • java url安全Base64
      String encodeResult = java.util.Base64.getUrlEncoder().encodeToString("???".getBytes());System.out.println(encodeResult);输出结果为Pz8_
复制代码
  • android 实现
   String raw = "???";String result = Base64.encodeToString(raw.getBytes(), Base64.NO_WRAP |     Base64.NO_PADDING | Base64.URL_SAFE);
复制代码

##注意

  • 由于Android的Base64编码是默认换行,因此在进行服务器验证的时候,会出现验证失败的情况,这是由于服务器那边的解码不支持换行符模式,所以编码时需要增加flag标志,android总共有以下几个flag。
  • flag种类如下:
    • DEFAULT 默认模式
    • NO_WRAP 过滤换行符
    • NO_PADDING 过滤结束符=
    • URL_SAFE 将+,/换成-,_
    • CRLF 换行符模式 选中windows而不是unix的lf
  • 参看源码如下

do_newline的判断为设置的flag与NO_WRAP进行&操作,如果true则换行否则不换行,结合flag的值和判断的方式我们可以知道通过设置各个flag的|操作既可让flag生效。

##踩坑记录

  • 在使用OKhttp的时候,传输的参数使用android base64进行编码,而字符刚刚好超过76,导致参数增加换行符,换行符为不可见字符,在OKhttp的参数中为不合法,所以直接报错,在这里需要过滤换行符和使用URL_SAFE的模式。

参考链接

Base64编码及应用 Android Base64

Base64编码及Android的应用相关推荐

  1. base64编码转换android,Android将base64编码转化成图片

    类似base64流的图片解析并展示: data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBw ...

  2. android Java BASE64编码和解码一:基础

    今天在做Android项目的时候遇到一个问题,需求是向服务器上传一张图片,要求把图片转化成图片流放在 json字符串里传输. 类似这样的: {"name":"jike&q ...

  3. android base64编码

    Base64 编码换行和+号遍空格的处理 Android自身带有Base64加密与解密的包,可以方便地加密密码方便传输. String base64Token = Base64.encodeToStr ...

  4. android Java BASE64编码和解码二:图片的编码和解码

    1.准备工作 (1)在项目中集成 Base64 代码,集成方法见第一篇博文:android Java BASE64编码和解码一:基础 (2)添加 ImgHelper 工具类 package com.a ...

  5. Android开发 - ImageView加载Base64编码的图片

    在我们开发应用的过程中,并不是所有情况下都请求图片的URL或者加载本地图片,有时我们需要加载Base64编码的图片.这种情况出现在服务端需要动态生成的图片,比如: 二维码 图形验证码 - 这些应用场景 ...

  6. 正在将错误信息上传至服务器,android - 将Base64编码的图像上传到服务器-400服务器错误 - 堆栈内存溢出...

    我正在使用Volley将具有JSON负载的Base64编码图像上传到HelpScout服务器 . 返回com.android.volley.ServerError和状态代码400 . 我将图像编码如下 ...

  7. java中base64编码加密和android中base64编码加密不一样?base64编码解析错误?

    在android的base64加密后得到: WwogIHsKICAgICJ0MSI6ICIwIiwKICAgICJ0MiI6ICIyNDM4NCIsCiAgICAidDMiOiAiIiwKICAgIC ...

  8. Android图片的Base64编码与解码

    Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法. Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较 ...

  9. android转base64内存溢出,base64编码处理大文件

    在作项目的时候遇到须要将文件转为base64编码,并存储在文件中.程序员 在将文件转为base64编码是会将文件读入内存,进行base64编码,输出到文件中.代码入下:编码 1spa 2code 3内 ...

最新文章

  1. R语言置换检验(permutation tests、响应变量是否独立于组、两个数值变量是独立的吗、两个分类变量是独立的吗)、置换检验的基本步骤、R语言自助法Bootstrapping计算置信区间
  2. SAP QM 事务代码QAC2的BUG?
  3. printf 命令详解
  4. 2016年11月2日——jQuery源码学习笔记
  5. c++调用dll动态链接库历程
  6. JS OOP -01 面向对象的基础
  7. 学习笔记【2010/09/20-2010/11/27】
  8. python截取关键字后的字符串_使用正则表达式获取python中特定字符串之后的所有内容...
  9. ctf up怎么写 write_软件测试工程师要不要写工具?
  10. chrome调试、移动端调试
  11. Linux常用命令——rsync
  12. 手机背景图片在安卓手机上不显示
  13. 利用集成学习(Adaboost(DTs))对高光谱影像数据集(mat)分类
  14. 心系冬奥 翰墨传情 |当代书画名家为奥运加油书画推介展【姜萌篇】
  15. 双系统后适合装matlab吗,安装双系统对电脑有什么影响|电脑装双系统有什么好处和坏处...
  16. 【游戏建模模型制作全流程】ZBrush蜥蜴模型雕刻教程
  17. 机器学习过程步骤总结
  18. IP协议首部详细分析
  19. Amazon CloudFront CDN + s3 源站跨域配置
  20. 流式布局FlowLayout支持行数控制,单选,多选,点击等操作

热门文章

  1. jquery 获取Input 值
  2. Larbin使用方法2
  3. [概统]本科二年级 概率论与数理统计 第八讲 大数定律与中心极限定理
  4. UA MATH565C 随机微分方程III Ito Isometry
  5. 超图使用服务管理页面发布服务图解
  6. GIS地图界面和计算机图形学填充算法
  7. mvp 在 flutter 中的应用
  8. Jmeter学习系列----1 环境搭建
  9. C#语法基础之第三节
  10. 【Redis】2、CentOS 7 上安装 redis3.2.3安装与配置