base64的笔记

逆变器方案(工频全套)工频正弦波逆变器开发板全套设计资 逆变器方案(工频全套)工频正弦波逆变器开发板,24V-72V通用12只TO-247封装MOS管,额定输出功率6500W以下;配有触摸屏操作界面,运行数据一目了然,带市电互补UPS功能,可选择电池优先或市电有限工作,我们的开发板均从实战角度出发,让您的学习更便捷,包含全套设计资料,PCB.原理图.源代码,程序均有中文注释,MCU选用美国微芯公的PIC-8位单片机,民用数字电源首选单片机,抗干扰能力强,运行稳定。... 阅读详情

过去一直没搞懂base64是什么,最近看了阮一峰的笔记后,自己查了部分资料后才搞明白是什么。原来base64也像我之前做的UTF-8笔记一样,进行了编码,是为了解决电子邮件中不能直接使用非ASCII码字符的规定的问题。当然,现在我们常常是在图片中使用base64,减少请求次数。

1、什么是base64

我们都知道,ASCII码字符集只有128个字符,对于美国人可能还够用,但是对于其他国家来说就远远不够了。于是出现了Unicode字符集,它几乎囊括了所有你能见到的文字。并且还在不断发展。但是Unicode组织是在1988年才成立,那在这之前常用的字符集是什么?ASCII字符集。所以1982年给电子邮件定规范的时候,就规定了电子邮件只能使用ASCII字符。这当然不利于电子邮件发展,你想,你写一封电子邮件还得用英文写。。。因此1992年,工程师们决定扩展电子邮件的技术规范,提出一系列补充规范,出现了MIME。MIME使用了Quoted-printable和Base64对邮件重新进行了编码,将那些非ASCII字符转成ASCII字符,关于MIME的介绍,可以看阮一峰的MIME笔记。这里主要介绍base64。

2、base64的编码方式

好的,我们已经知道base64是用来将非ASCII字符转化为ASCII字符的。那么它具体是怎么实现的呢?它的规则如下:

  • 首先将每3个字节分为一组,这样就一共是24个二进制位
  • 接着将24个二进制位分成4组,每组6个二进制位
  • 再在每组前面补充2个0,这样每组就是8个二进制位,共有4个字节
  • 最后每个字节根据下表一一对应,组合起来就是编码完成的base64
  0  A  17 R   34 i   51 z

  1  B  18 S   35 j   52 0

  2  C  19 T   36 k   53 1

  3  D  20 U   37 l   54 2

  4  E  21 V   38 m   55 3

  5  F  22 W   39 n   56 4

  6  G  23 X   40 o   57 5

  7  H  24 Y   41 p   58 6

  8  I  25 Z   42 q   59 7

  9  J  26 a   43 r   60 8

  10 K  27 b   44 s   61 9

  11 L  28 c   45 t   62 +

  12 M  29 d   46 u   63 /

  13 N  30 e   47 v

  14 O  31 f   48 w   

  15 P  32 g   49 x

  16 Q  33 h   50 y

上表来自阮一峰-Base64笔记

举个例子,现在我们要把sea转化为base64。sea由3个字母组成,每个字母对应一个字节。它们的ASCII值分别是115、101、97,转成二进制分别是01110011、01100101、01100001。组合起来就是011100110110010101100001,分成4组就是011100-110110-010101-100001(这里为了区分使用-进行了分割,后文类似)。再在每组前面添2个0,就是00011100-00110110-00010101-00100001。转成10进制,28-54-21-33,再根据上表对应得到base64值为c2Vh。

但是有时候字节数不是3的倍数,这样会余下1个或2个字节。这种情况的处理方法如下:

  • 二个字节的情况:将这二个字节的一共16个二进制位,按照上面的规则,转成三组,最后一组除了前面加两个0以外,后面也要加两个0。这样得到一个三位的Base64编码,再在末尾补上一个"="号。
  • 一个字节的情况:将这一个字节的8个二进制位,按照上面的规则转成二组,最后一组除了前面加二个0以外,后面再加4个0。这样得到一个二位的Base64编码,再在末尾补上两个"="号。

举个例子,如果我们要将se转成base64,根据上文我们知道它的二进制是01110011-01100101,根据每组6位可以分为011100-110110-0101,再由上面的规则可以写成00011100-00110110-00010100,转成10进制为28-54-20,这样base64为c2U=。别忘了最后的那个=号。

如果要将s转成base64,根据上文我们知道它的二进制是01110011,根据每组6位可以分为011100-11,再由上面的规则可以写成00011100-00110000,转成10进制为28-48,这样base64为cw==。别忘了最后的那2个=号。

上面的例子都是英文的,那么肯定有小伙伴要问了,中文怎么办?这里需要考虑到编码方式,汉字有多种编码方式,如gb2312、utf-8、gbk等等。不同编码方式对应的base64是不同的。不知道什么是编码可以看我的笔记。因为网页通常使用utf-8编码,这里以utf-8编码作为例子。

假设我们要把汉字好转成base64。步骤如下:

  • 好字的utf-8编码是E5A5BD,转成二进制是11100101-10100101-10111101,按每6个一组为111001-011010-010110-111101
  • 在每组的前面添加2个0,得到00111001-00011010-00010110-00111101,转成10进制为57-26-22-61
  • 对应规则表得到base64为5aW9

那么我们每次想要转换base64都要这么搞吗?当然不是的,网上有很多在线转化base64的网站。例如:base64在线转化。在JavaScript中也有两个函数可以用于base64编码和解码,分别是btoa()和atob。例如上面的例子,要对sea进行base64编码可以这样:btoa('sea')。得到结果是c2Vh,解码可以这样:atob('c2Vh'),返回sea。但是这两个函数只适用于ASCII字符集里面的字符。就,,,没什么用。

3、base64的优缺点

base64初衷是应用于电子邮件,将非ASCII字符转化为ASCII字符。但是现在常常用于图片的转化。在图片中我们可以这么使用:<img src="https://img-blog.csdnimg.cn/2022010703501249031.png" />。其中data:image/png;base64,为固定前缀,表示使用base64,image/png表示这是一个png图片。同样,也可以用在背景图片中,url(https://img-blog.csdnimg.cn/2022010703501249031.png)。

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAAAmJLR0QA/4ePzL8AAAKLSURBVEjHjZW/T1NRFMc/valY0FgWI0U0pUgCQWXgxyYOuEOiDPBHMEiMpQEkMWmJ2sGdjQQHGERWGXTERoOkQgJio9ZqXFqCWEjDJfe9Png/S793ae4532/PPefd+/VJXBCgh9s000AdsM9vvvGZDxSdqU6BBoboI+AiW+Q9i+QqCdQwzCB+JGlSfCHHHnCREO300IGPEq95xaG7QIgoESRvWbD/Tzk+xD187DBjiktjtcg5uSxnZaukwmqVs3JZzsmIkWNUEOI5QdaZYdetqyZcYpybFHikVyHKZ48S5BNTZ9Jhl0k+EmScmlOBYSJkSVA6k65QIkGWZkYMgRCDHJHkf1V0tIEmOWKAkC7wAD8rbFVNV9hiBT9DSqCWPiQLlvBjnhG07AR5yQvLzgKSO9QKugmQts39Mu3ETRL1JIhwzpKTI02AbkEnkLIV+JTvXD+RqCfONX7wxJalWJ2CMLBhCxWInUgY9Bh5W9YmEParTvLL0SQlEdckfB50yKoJCu3C7jmCp1V40XVWnXAJGPDh036pT94Tgn3twjphnN3cTisUa19oA2z0pMdM7bTjqhqmIAO0edLzlolYoVgZwRrQYwtNWVpnSEzasrqBNUGKIh3aMM393bZ0Xkls8NeSE6KDA1KqxaNyWY5WfIfcVpkltGtRop/WCgN14gb9lFjUr3OOJQQPXZ9ydwQYQ/BGfcH6hzRPhiai+Kui+4nSRIZ5Tp60Q+IU6GKiiioCTNBFgTgHWHyhhWnq+UmS7YpnH6OJPNN81TesxhIjXIWxZIifxu3WNsJA2dpW2TRZWxu9ZWtbYt7L2nQ0cp+7nHep4JB3LNrfDi977+UWEa5wAfjHH3ZYZ9Vh78AxZeQKo4xU7NcAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC" />

但是base64也有它的缺点,从上面的转化过程我们已经知道,一个3字节的东西转为base64后会变成4字节,这样增加了文件体积。小的图片还好,如果是大图,就不推荐使用base64了,因为会导致文件体积过大,增大了大约三分之一的体积。

以上。

4、参考链接

1. 阮一峰 - MIME笔记
2. 阮一峰 - Base笔记

OpenClaw 钉钉和飞书集成方案研究 & OpenClaw 研究分析报告 OpenClaw(原名 Clawdbot,曾用名 Moltbot)是一款开源的个人 AI 智能体,采用"本地优先"设计理念。与传统聊天机器人不同,OpenClaw 具备真正的系统级执行能力,能够实际操作用户的计算机系统,完成各种实际任务。核心优势本地部署:所有数据存储在用户本地设备,隐私零泄露系统级执行:具备完整的系统访问权限,可执行文件操作、命令运行等全渠道交互:支持多种即时通讯平台作为交互界面开源透明:MIT 许可证,代码完全开放,社区驱动开发应用场景个人助理:日程管理、任务提醒、邮件处理。 阅读详情

相关推荐

从零到一:Bioconductor新手入门与R包安装实战

本文详细介绍了Bioconductor在生物信息学中的重要性及其R包安装实战指南。从环境准备到BiocManager的使用,再到常见问题排查,帮助新手快速掌握这一强大工具。特别推荐org.Hs.eg.db等核心工具包,助力基因注释和功能分析,提升研究效率。

weixin_29061041的博客 418

Base64

文章目录Base64定义产生原因作用使用场景编码规则常见问题base64是加密算法?参考文献 Base64 定义 将二进制文件转化为ASCII码中可见64个字符,即转换为可见文本。 产生原因 满足电子邮件中不能直接使用非ASCII码字符的规定。 作用 需要将二进制文件通过文本方式传输时,避免原二进制文件的字符被特殊处理。 在大多数软硬件设备上,这64个字符不会被特殊处理,从而实现无错传输。 使用场...

u013617791的专栏 420

嵌入式音频架构 - AudioWeaver 整体概念

AudioWeaver 是DSP Concept公司推出的基于嵌入式平台的音频框架。由AWE Core embedded processing engine 和 Audio Weaver Designer IDE 组成。 Audio Weaver Designer 有三个版本,ST Edition, Standard Edtion 和 Pro Edtion。 Audio Weaver Designer界面: Audio Weaver 的整体使用架构: AWD算法流文件,AWS配置脚本文件,AWB嵌入式b

甲客实验室 6879

又是阮一峰:文件和二进制数据的操作 - 从来没这么佩服一个没见过面的人

文件和二进制数据的操作 来自《JavaScript 标准参考教程(alpha)》,by 阮一峰 目录 Blob对象 FileList对象 File对象 FileReader对象 综合实例:显示用户选取的本地图片 URL对象 参考链接 历史上,JavaScript无法处理二进制数据。如果一定要处理的话,只能使用charCodeAt()方法,一个...

weixin_34216107的博客 387

信号完整性入门:为什么工程师总爱用dB来描述衰减?

本文深入探讨了信号完整性分析中工程师偏爱使用dB(分贝)单位描述衰减的原因。dB通过对数转换,将大动态范围的乘除关系简化为加减运算,极大地方便了多级系统分析和链路预算计算。文章重点解释了-3dB点的核心意义,即功率衰减一半的临界状态,并阐述了其在评估信道带宽、插入损耗与回波损耗等关键参数中的实际应用,是高效工程思维和沟通的重要工具。

weixin_29263201的博客 386

电蚊拍为什么能秒杀蚊子?深入解析两种四倍压整流电路设计差异

本文深入解析电蚊拍秒杀蚊子的核心原理——四倍压整流电路设计,对比对称式与级联式两种方案的性能差异。通过详细电路分析、实测数据对比和选型建议,揭示高压电路设计的关键技术要点,为电子爱好者和工程师提供实用参考。

rust6ferris的博客 751

CAP和BASE理论

CAP理论 一个分布式系统不可能同时满足一致性(C:Consistency)、可用性(A:Availability)和分区容忍性(P:Partition Tolerance),最多只能同时满足其中两项。 一致性 一致性是指在多个副本之间是否能够保持一致的特性。在一致性的需求下,当一个系统在数据一致的状态下执行更新操作后,应该保证系统的数据仍然处于一致的状态。 在分布式系统中,如果能够做到...

248

光电容积脉搏波PPG信号分析笔记

脉搏波信号PPG分析笔记

teresa_zp的专栏 6478

【JS】阮一峰js教程总结

区别是这样的:null 是一个表示“空”的对象,转为数值时 为 0 ;-undefined 是一个表示”此处无定义”的原始值,转为数值时为 NaN 。注意,空数组( [] )和空对象( {} )对应的布尔值,都是 true 。 NaN “非数字”( NaN ),typeof NaN // ‘number’ NaN 不等于任何值,包括它本身。 NaN 在布尔运算时被当作 false 。 NaN 与任何数(包括它自己)的运算,得到的都是 NaN 。 isNaN()方法可以用来判断一个值是否为 NaN 。isN

zhaohb2016的博客 4891

利用makehumancommunity导入人体模型到COMSOL里(需要solidwork)

#makehumancommunity #solidwork #COMSOL

qq_41227634的博客 2158

点云处理实操(四) -PCL中的点云三角化

点云处理实操(四) -PCL中的点云三角化

cangqiongxiaoye的博客 939

一个案例让你彻底搞懂base64编码过程

声明:本文参考自云析学院的公开课。 简介:Base64就是一种基于64个可打印字符来表示二进制数据的编码方法。为什么不直接用ASCII码呢?因为我们输入的字符可能有ASCII码中不可见的字符,为了完全可见,就用了base64编码。 比如Hello这个单词,我们把它变成base64编码怎么做呢? 首先引入ASCII对照表:            2.一个字节是8...

贾廷帅的博客 1万+

SAP-ABAP:BAPI_INSPOPER_RECORDRESULTS 记录检验操作结果更新检验批状态详细解析

SAP-ABAP:BAPI_INSPOPER_RECORDRESULTS 记录检验操作结果更新检验批状态详细解析

baidu_35680696的博客 970

Metasploit开发笔记之编译C语言Base64支持

Metasploit C 编译器内置支持 Base64 编码和解码,这些功能是通过。以后可能会出一些实例教程,但是最近较忙,先整理学习笔记。解码 Base64。

K 289

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Base64笔记

作者: 阮一峰 日期: 2008年6月23日 1. 昨天的《MIME笔记》中提到,MIME主要使用两种编码转换方式----Quoted-printable和Base64----将8位的非英语字符转化为7位的ASCII字符。 虽然这样的初衷,是为了满足电子邮件中不能直接使用非ASCII码字符的规定,但是也有其他重要的意义: a)所有的二进制文件,都可以因

djun100的专栏 776

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

base64笔记

文章目录1、[WIKI的解释](https://zh.wikipedia.org/wiki/Base64)2、太深奥了,翻译一下3、发现了个问题4、附沅大的解释5、base64转换工具 1、WIKI的解释 Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于 log 2 ⁡ 64 =

程序员三木的博客 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Base64 笔记

1: Base64 1: 概念 Base64是一种基于64个可打印字符来表示二进制数据的表示方法。 在Base64中的可打印字符包括字母A-Z、a-z、数字0-9,这样共有62个字符,加上**+和/**, 共64个字符. 普通的文本数据也可以使用base64进行编解码 Base64编解码的过程是可逆的 Base64不能当做加密算法来使用 2: 应用场景 在计算机中任何数据都是按asci...

weixin_44922700的博客 760
上一篇: Unicode,UTF-8,UTF-16和JavaScript
下一篇: nth-child和nth-of-type的区别
ccattempt
博客等级 码龄7年 6粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值