JavaScript中btoa和atob全局函数示例详解

 更新时间:2024年08月19日 09:29:06   作者:凉生阿新  
这篇文章主要给大家介绍了关于JavaScript中btoa和atob全局函数的相关资料,atob和btoa是window对象的两个函数,用来编码解码Base64,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

在 JavaScript 中,btoa 和 atob 是两个处理 Base64 编码的全局函数,它们通常用于在浏览器环境中对二进制数据进行编码和解码。

不过,需要注意的是,这两个函数并非 JavaScript 标准规范(ECMAScript)的一部分,而是浏览器环境(如 Web API)提供的。

一、btoa()

btoa() 函数用于将二进制数据编码为 Base64 格式的 ASCII 字符串。它接受一个 DOMString(即,一个 UTF-8 格式的字符串)作为参数,并返回一个包含原始数据的 Base64 编码的 ASCII 字符串。

const binaryString = "Hello, World!";  
const base64String = btoa(binaryString);  
console.log(base64String); // 输出:SGVsbG8sIFdvcmxkIQ== 

PS:btoa() 只能对 ASCII 字符串进行编码,因此如果你尝试对非 ASCII 字符串(如包含中文字符的字符串)进行编码,可能会得到意外的结果或抛出错误。

二、atob()

atob() 函数用于解码通过 btoa() 编码的 Base64 字符串。它接受一个包含 Base64 编码数据的 ASCII 字符串作为参数,并返回一个包含原始数据的 DOMString。如果字符串不是一个有效的 Base64 编码,则会抛出一个错误

const base64String = "SGVsbG8sIFdvcmxkIQ==";  
const decodedString = atob(base64String);  
console.log(decodedString); // 输出:Hello, World!

在使用 btoa() 和 atob() 时,请确保你的代码运行在支持这些函数的环境中(如浏览器)。如果你正在编写跨平台或服务器端 JavaScript 代码,可能需要使用其他库(如 Node.js 中的 Buffer 类)来处理 Base64 编码和解码。

三、优缺点

优点:

  • 方便性:它提供了一种简单的方法来将二进制数据(如字符串、Blob、ArrayBuffer 等)转换为 Base64
  • 编码的字符串,以便在网络中传输或在浏览器中存储。 兼容性:在现代浏览器中,btoa 函数的兼容性相对较好。

缺点:

  • 输入限制:btoa 只能接受 UTF-8 编码的字符串作为输入。如果你尝试使用其他编码的字符串或二进制数据(如
    ArrayBuffer),你需要先将其转换为 UTF-8 编码的字符串。 不支持二进制 Blob 或
  • ArrayBuffer:虽然可以使用一些技巧(如 FileReader API)将 Blob 或 ArrayBuffer 转换为
  • Base64 字符串,但 btoa 本身并不直接支持这些类型。 安全性:Base64
  • 编码不是一种加密方法,因此它不会增加数据的安全性。它只是将数据转换为一种可在文本中安全传输的格式。

使用场景

  • 数据传输:在不支持二进制的上下文中,如 HTTP 请求的 URL 或 JSON 格式,可以使用 Base64 编码传输二进制数据。
  • 图片数据:在 Web 页面中,可以通过 Base64 编码直接在 HTML中嵌入图片,而不需要使用<img>标签的src属性指向一个外部图片文件

注意事项

  • btoa和atob只能处理「纯文本数据」,不能用于编码二进制数据。 编码后的 Base64 字符串大小会比原始数据大约 33%。
  • btoa和atob是 Web 浏览器提供的函数,不是 ECMAScript 标准的一部分,因此在非浏览器环境中(如
    Node.js)不可用。

附:JS中 atob 方法解码中文字符乱码问题

注:非中文的话直接用 btoa 和 atob 就行了

// 中文 base64 编码
function utf8_to_b64(str) {
    return window.btoa(unescape(encodeURIComponent(str)));
}


// 中文 base64 解码
function b64_to_utf8(str) {
    return decodeURIComponent(escape(window.atob(str)));
}

总结 

到此这篇关于JavaScript中btoa和atob全局函数的文章就介绍到这了,更多相关Js的btoa和atob全局函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Bootstrap CSS组件之输入框组

    Bootstrap CSS组件之输入框组

    这篇文章主要为大家详细介绍了Bootstrap CSS组件之输入框组(input-group),具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • js检查是否关闭浏览器的方法

    js检查是否关闭浏览器的方法

    这篇文章主要介绍了js检查是否关闭浏览器的方法,涉及javascript针对窗口事件的判定与操作相关技巧,需要的朋友可以参考下
    2016-08-08
  • JS读取cookies信息(记录用户名)

    JS读取cookies信息(记录用户名)

    很多网站、博客把网页生成html静态页面了,以利于搜索引擎的索引排名,减轻服务器负担。静态页面由于其稳定快速更快,给用户及站长带来了方便。但评论后如何记住用户的信息呢
    2012-01-01
  • js实现计算器功能

    js实现计算器功能

    这篇文章主要为大家详细介绍了js实现计算器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • 利用uniapp+vue3+js适配微信隐私协议开发指南

    利用uniapp+vue3+js适配微信隐私协议开发指南

    这篇文章主要给大家介绍了关于利用uniapp+vue3+js适配微信隐私协议开发指南的相关资料,适配最新微信小程序隐私协议开发指南,兼容uniapp版本,需要的朋友可以参考下
    2023-12-12
  • 使用UniApp框架来阻止事件冒泡

    使用UniApp框架来阻止事件冒泡

    在开发移动应用程序时,我们经常需要处理用户交互事件,然而,有时候这些事件会冒泡,导致意外的行为和不良用户体验,在本文中,我们将探讨如何使用UniApp框架来阻止事件冒泡,并提供一些示例代码来帮助您理解如何实现这一功能,需要的朋友可以参考下
    2023-11-11
  • 详解webpack babel的配置

    详解webpack babel的配置

    本篇文章主要介绍了详解webpack babel的配置,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • 全面解析Bootstrap表单使用方法(表单控件)

    全面解析Bootstrap表单使用方法(表单控件)

    这篇文章全面解析了Bootstrap表单的使用方法,本文重点介绍Bootstrap表单控件,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • BootStrap Datepicker 插件修改为默认中文的实现方法

    BootStrap Datepicker 插件修改为默认中文的实现方法

    bootstrap-datepicker 是一个非常优秀的时间选择插件,默认是英文显示日期的,通过下面几个小修改让其支持默认中文。下面通过本文给大家介绍BootStrap Datepicker 插件修改为默认中文的实现方法,一起看看吧
    2017-02-02
  • JavaScript知识点总结(十)之this关键字

    JavaScript知识点总结(十)之this关键字

    这篇文章主要介绍了JavaScript知识点总结(十)之this关键字的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-05-05

最新评论