前端 - base64原理浅析

  1. 什么是Base64编码
    Base64 就是指64个字符,包括大小写字母[A-Z、a-z],阿拉伯数字[0-9],还有两个字符[+、/],两外还有一个表示后缀的字符 [ = ],Base64就是指只能传输这64个字符

  2. Base64编码原理
    先提一下ASCII码, ASCII码的范围是0-127,其中0-31和127是控制字符,共33个。其余95个,即32-126是可打印字符,包括数字、大小写字母、常用符号等。Base64 就是将 ASCII码 用 Base64位字符表示
    Base64位只需要6个字符即可表示,而 ASCII码 需要8个字符位,这就是常说的,Base64编码利用6bit字符来表达 ASCII码 8bit字符

  3. 使用Base64编码的优缺点

    1. 编码之后的字符串可以直接内联到HTML中显示,比如,我们一些体积比较小的图片,就可以转换成 Base64编码,直接插入到图片的 src 路径中
    2. 采用 Base64编码之后,数据体积通常是原数据的体积4/3
  4. Base64编码原理具体解析

    1. 首先,6bit显然不够容纳8bit的数据。6和8的最小公倍数是24,所以我们用4个Base64字符刚好能够表示三个传统的8bit字符。如下所示,字符串Man的编码图解如下
      在这里插入图片描述Man的编码结果为TWFu,显然,Base64编码会多1/3的长度,这也解释了文中开头的疑问,为什么Base64编码后的体积会大1/3。
      Man这个字符串的长度刚好是3,我们能用4个Base64来表示。如果待编码的字符串长度不是三的倍数时应该怎么处理呢?
      这是需要做一个特殊处理,假设待编码字符串长度为10。这前9个字符可以用12个Base64字符表示。第10个字符的前6bit作为一个Base64字符,剩下的2bit后面需要先补0,补到6位(此处补4个0)作为第二个Base64字符,至于第三个和第四个Base64字符,虽然没有相对应的内容,我们仍需以=填充。
      如下图所示,A对应的Base64编码为QQ==,BC对应的Base64编码为QkM=

    在这里插入图片描述2 . 解码的过程比较简单。去掉末尾的等号=。剩下的Base64字符,每8bit组成一个8bit字节,最后剩余不足8位的丢弃即可

参考链接:
https://mp.weixin.qq.com/s/Pvq_zDKePlkW8SW4RT2xGg

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前端使用js对base64进行解码时,如果解码后出现乱码,可能存在以下几种可能的原因。 1. 编码方式不正确: 在使用js进行base64解码之前,需要确定编码方式是否正确。base64编码是一种将二进制数据转换为可打印字符的编码方式。常用的编码方式有UTF-8和ASCII,需要根据编码方式选择正确的解码方式。 2. 解码函数使用错误: js提供了多种base64解码函数,比如atob()函数,可以进行简单的base64解码。但是,如果被解码的字符串包含非标准的base64字符,或者字符串长度不是4的倍数,就会导致解码出现问题。在这种情况下,可以考虑使用其他第三方库或者自定义函数来进行解码。 3. 数据损坏: 如果待解码的base64字符串在传输或保存过程中发生了数据损坏,就会导致解码后的数据乱码。可以尝试使用其他方式对数据进行验证,或者尝试使用其他base64解码工具对同样的待解码数据进行解码,以确定是否是数据损坏引起的问题。 4. 解码后的数据处理不正确: base64解码后的数据是经过转换的二进制数据,无法直接在浏览器或控制台中显示。如果直接将解码后的数据输出到页面上或者进行其他处理,可能会导致乱码。在处理解码后的数据时,需要根据具体需求进行进一步的处理,比如将解码后的二进制数据转换为字符串或者其他格式。 对于解决前端js-base64解码乱码的问题,可以通过以上几种可能的原因进行排查,并逐一进行解决。同时,根据具体情况也可以参考其他前端开发者的经验或者寻求专业人士的帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值