广告
返回顶部
首页 > 资讯 > 精选 >JavaScript中的Base64编码字符串是什么
  • 785
分享到

JavaScript中的Base64编码字符串是什么

2023-07-05 04:07:10 785人浏览 薄情痞子
摘要

今天小编给大家分享一下javascript中的Base64编码字符串是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。初步

今天小编给大家分享一下javascript中的Base64编码字符串是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

初步认识

下面的这段字符串,应该是大家都很常见的。

通过这种固定的格式,来表示一张图片,并被浏览器识别,可以完整的展示出图片:

data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0c......

这里展示的是svg格式的图片,当然我们还能加载任何浏览器支持的格式的图片。

这段字符串就是基于Base64编码得来的,其中base64,后面那一长串的字符串,就是Base64编码字符串。

Base64是怎么诞生的

互联网发展早起,电子邮件是最有效的应用。

而电子邮件的SMTP传输协议在早期,只能用于传送7位的ASCII码,而ASCII码就是基于英语设计的,对于非英语国家的文字等资源就无法发送。

为了解决这个问题,后来有了通用互联网邮件扩充MIME,增加了邮件的主体结构,定义了非ASCII码的编码传输规则,这就是Base64。

关于字符编码的知识,请查看前端开发中需要搞懂的字符编码知识

基础定义

Base64是基于64个可打印字符来表示二进制数据的编解码方式。

正因为可编解码,所以它主要的作用不在于安全性,而在于让内容能在各个网关间无错的传输。

这64个可打印字符包括大写字母A-Z、小写字母a-z、数字0-9共62个字符,再加上另外2个 +/

Base64是一种索引编码,每个字符都对应一个索引,具体的关系图,如下:

JavaScript中的Base64编码字符串是什么

这也是名称中64的由来。

编码方式

由于64等于2的6次方,所以一个Base64字符实际上代表着6个二进制位(bit)。

然而,二进制数据1个字节(byte)对应的是8比特(bit),因此,3字节(3 x 8 = 24比特)的字符串/二进制数据正好可以转换成4个Base64字符(4 x 6 = 24比特)。

为什么是3个字节一组呢? 因为6和8的最小公倍数是24,24比特正好是3个字节。

具体的编码方式:

  • 将每3个字节作为一组,3个字节一共24个二进制位

  • 将这24个二进制位分为4组,每个组有6个二进制位

  • 在每组的6个二进制位前面补两个00,扩展成32个二进制位,即四个字节

  • 每个字节对应的将是一个小于64的数字,即为字符编号

  • 再根据字符索引关系表,每个字符编号对应一个字符,就得到了Base64编码字符

JavaScript中的Base64编码字符串是什么

上图中的字符串 'you',经过转换后,得到的编码为: 'eW91'

体积增大

我们可以看到,当3个字符进行Base64转换编码后,最后变成了4个字符。因为每个6比特位,都补了2个0,变成8比特位,对应1字节。

这里正好多了三分之一,所以正常情况下,Base64编码的数据体积通常比原数据的体积大三分之一

这也是为什么我们在前面讲使用Base64编码优化图片时,需要强调是小图标,如果图片都使用该方式,则静态文件会增大很多,并不合适。

= 等号

3个英文字符,正好能转成4个Base64字符。那如果字符长度不是3的倍数,那应该使用什么样的规则呢?

其实也简单,我们在实际使用Base编码时,常会发现有第65个字符的存在,那就是 '=' 符号,这个等于号就是针对这种特殊情况的一种处理方式。

对于不足3个字节的地方,实际都会在后面补0,直到有24个二进制位为止。

但要注意的是,在计算字节数时,会直接使用总长度除以3,如果余数为1则会直接在最后补一个=,如果余数为2则补两个=

因此,转码后的字符串需要补的后缀等号,要么是1个,要么是2个,具体的可以见下图:

JavaScript中的Base64编码字符串是什么

图中第二个,使用的是单独的字符 'd',是为了区分索引字符表里的索引0,这个时候,得到编码中,会存在一个索引0对应的A字符,而'='是直接补上2个。

非ASCII码字符

由于 Base64 仅可对 ASCII 字符进行编码,如果是中文字符等非ASCII码,就需要先将中文字符转换为ASCII字符后,再进行编码才行。

编解码方法

btoa 和 atob

JavaScript提供了两个原生方法,用来处理Base64编码:btoa()atob()

  • btoa(): 将字符串或二进制值转换成Base64编码字符串。

  • atob(): 对base64 编码的字符串进行解码。

btoa('you') // 'eW91'atob('eW91') // 'you'

注意:

btoa方法只能直接处理ASCII码的字符,对于非ASCII码的字符,则会报错。

atob方法如果传入字符串参数不是有效的Base64编码(如非ASCII码字符),或者其长度不是4的倍数,会报错。

btoa('中') // Uncaught DOMException: The string to be encoded contains characters outside of the Latin1 range.atob('y') // Uncaught DOMException: The string to be decoded is not correctly encoded.

处理中文字符

由于btoa、atob 仅支持对ASCII字符编码,也就是单字节字符,而我们平时的中文都是 2-4 字节的字符。

因此,可以先将中文字符转为 utf-8 的编码,将utf-8编码当做字符,这样就可以对多个单字节字符进行编码。

对于中文可以使用这两个方法: encodeURIComponent()decodeURIComponent()

  • encodeURIComponent():将非ACSII码的字符进行utf-8编码

  • decodeURIComponent():解码使用

如下,编解码中文的方式:

window.btoa(encodeURIComponent('中国'))// 'JUU0JUI4JUFEJUU1JTlCJUJE'decodeURIComponent(window.atob('JUU0JUI4JUFEJUU1JTlCJUJE'))// '中国'

第三方库

js-base64

前端常见应用

接下来,我们了解下前端开发中常见的对Base64编码的一些使用场景。 Base64在前端方面的应用,多数都是针对图片的处理,一般都是基于DataURL的方式来使用。

Data URL 由 data:前缀MIME类型(表明数据类型)base64标志位(如果是文本,则可选)以及 数据本身 四部分组成。 具体的格式:data:[<mime type>][;base64],<data>。 这里的第四部分 <data> 数据本身,就是一个Base64字符串。

小图片转码

即开篇说的针对图片优化,使用Base64能减少请求数的,可以在img标签下,或者CSS中:

<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0c......Ii8+PC9nPjwvc3ZnPg==">
.icon {  background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0c......Ii8+PC9nPjwvc3ZnPg==);}

当我们使用VueReact框架时,也可以通过url-loader来配置,图标转Base64的大小:

  .loader('url-loader')  .tap(options => {    options.limit = 10240 // 10kb    return options  })

文件读取

WEB环境下,有提供 FileReaderapi,用来读取文件的数据,可以通过它的 readAsDataURL() 方法,将文件数据读取为Base64编码的字符串数据:

  let reader = new FileReader()  reader.onload = () => {    let base64Img = reader.result  };  reader.readAsDataURL(file)

该方法常用在图片上传中。

canvas生成图片

Canvas本质上是一个位图图像,它有提供 toDataURL() 方法,将画布导出生成为一张图片,该图片将以Base64编码的格式进行保存。

const dataUrl = canvasEl.toDataURL()// data:image/png;base64,PHN2ZyB4bWxucz0iaHR0c......

其他

除处理图片展示外,还会在特殊数据传输、简单编码和加密、代码混淆、部分证书中,见到Base64编码字符串。

以上就是“JavaScript中的Base64编码字符串是什么”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: JavaScript中的Base64编码字符串是什么

本文链接: https://www.lsjlt.com/news/349574.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript中的Base64编码字符串是什么
    今天小编给大家分享一下JavaScript中的Base64编码字符串是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。初步...
    99+
    2023-07-05
  • VBScript中的Base64编码字符串
    在VBScript中,可以使用`Base64Encode`函数来进行Base64编码。下面是一个简单的示例代码:```vbscrip...
    99+
    2023-09-26
    VBScript
  • 深入理解JavaScript中的Base64编码字符串
    目录初步认识Base64是怎么诞生的基础定义编码方式体积增大= 等号非ASCII码字符编解码方法btoa 和 atob第三方库前端常见应用小图片转码文件读取Canvas生成图片其他总...
    99+
    2023-02-21
    JavaScript Base64编码字符串 JavaScript Base64编码 JavaScript Base64
  • MySQL字符串转为base64编码的方法
    本文主要给大家介绍MySQL字符串转为base64编码的方法,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下MySQL字符串转为base64编码的方法...
    99+
    2022-10-18
  • node.js中怎么对字符串进行Base64编码和解码
    本篇内容介绍了“node.js中怎么对字符串进行Base64编码和解码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够...
    99+
    2022-10-19
  • Java中将base64编码字符串转换为图片的代码
    前一段时间,在做摄像头拍照上传,摄像头拍的照片为base64编码格式的字符串,需要上传至项目中,则需要使用到将base64编码字符串转换为图片 1、将base64编码字符串转换为图片...
    99+
    2023-03-19
    Java base64编码字符串转换为图片 Java base64转换图片 Java base64编码转换
  • Java中怎么将base64编码字符串转换为图片
    本篇内容介绍了“Java中怎么将base64编码字符串转换为图片”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!将base64编码字符串转换为...
    99+
    2023-07-05
  • JavaScript中的base64编码原理是什么
    今天小编给大家分享一下JavaScript中的base64编码原理是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。bas...
    99+
    2023-07-05
  • MySQL中通过FROM_BASE64()函数实现解码base64编码的字符串
    不知道大家之前对类似MySQL中通过FROM_BASE64()函数实现解码base64编码的字符串的文章有无了解,今天我在这里给大家再简单的讲讲。感兴趣的话就一起来看看正文部分吧,相信看完MySQL中通过F...
    99+
    2022-10-18
  • JavaScript 字符串是什么
    本篇文章给大家分享的是有关JavaScript 字符串是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。说起字符串,我们再熟悉不过了。接触编...
    99+
    2022-10-19
  • javascript中字符串指的是什么
    小编给大家分享一下javascript中字符串指的是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在javascript中,字符串(String)就是由零个或...
    99+
    2023-06-15
  • 在Java中怎么将 Base64编码与String字符串进行转换
    这篇文章给大家介绍在Java中怎么将 Base64编码与String字符串进行转换,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。具体方法如下:package com.duanlian.daimengmusic...
    99+
    2023-05-31
    java string base64
  • Python中的字符串与字符编码
    Hello,这里是Token_w的博客,欢迎您的到来 今天文章讲解的是Python中的字符串与字符编码,其中有基础的理论知识讲解,也有实战中的应用讲解,希望对你有所帮助 整理不易,如对你有所帮助,希望能得到你的点赞、收藏支持。感谢 ...
    99+
    2023-08-30
    python android 开发语言
  • python字符串的构成及字符编码的细节是什么
    本篇内容主要讲解“python字符串的构成及字符编码的细节是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python字符串的构成及字符编码的细节是什么”吧!字节与字符计算机存储的一切数据,...
    99+
    2023-06-02
  • base64编码指的是什么
    这篇文章给大家分享的是有关base64编码指的是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。base64编码是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表...
    99+
    2023-06-14
  • JavaScript字符串子串替换的方法是什么
    这篇文章主要介绍“JavaScript字符串子串替换的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript字符串子串替换的方法是什么”文章能帮助大家解决问题。一、JavaSc...
    99+
    2023-07-06
  • Base64编码的原理是什么
    这篇文章主要讲解了“Base64编码的原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Base64编码的原理是什么”吧!Base64是一种基于64个可打印字符来表示二进制数据的表示方...
    99+
    2023-06-27
  • Java中的字符串是什么
    这篇文章给大家分享的是有关Java中的字符串是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。java中的字符串String : 内容不可更换的StringBuffer :  线程安全的StringB...
    99+
    2023-06-03
  • javascript字符串进行编码转换的方法
    小编给大家分享一下javascript字符串进行编码转换的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!javascript字符串进行编码转换的方法:1、使用...
    99+
    2023-06-14
  • C++中的字符串编码怎么处理
    今天小编给大家分享的是C++中的字符串编码怎么处理,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。今天由于在项目中用到一些与C++混合开发的东西 ,需要通过socket与C++那边交换...
    99+
    2023-07-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作