btoa atob 与 base64,以及btoa报错

发布时间 2023-12-12 17:59:44作者: ziChin

在 JavaScript 中,btoaatob 是两个用于 Base64 编码和解码的函数。下面是对这两个函数以及 Base64 的解释和代码示例:

  1. btoa 函数:btoa(表示 base64 encode)将字符串转换为 Base64 编码的数据。它接受一个 ASCII 字符串参数,并返回经过 Base64 编码的字符串。
  • b 表示 "binary",它指示函数处理二进制数据的能力。
  • toa 是 "to ASCII" 的缩写,表明函数将数据从一种格式转换为 ASCII 字符串。

代码示例:

const originalString = 'Hello, World!';
const encodedString = btoa(originalString);
console.log(encodedString); // 输出:SGVsbG8sIFdvcmxkIQ==

btoa处理中文会报错,解决方案是先编译:

var str = '?title=标题&url=https://www.baidu.com'
var strA = window.btoa(encodeURIComponent(str))
var strB = decodeURIComponent(window.atob(strA))
console.log(strA) // 'JTNGdGl0bGUlM0QlRTYlQTAlODclRTklQTIlOTglMjZ1cmwlM0RodHRwcyUzQSUyRiUyRnd3dy5iYWlkdS5jb20='
console.log(strB) // '?title=标题&url=https://www.baidu.com'


  1. atob 函数:atob(表示 base64 decode)将已经进行 Base64 编码的数据解码为原始字符串。它接受一个 Base64 编码的字符串参数,并返回解码后的 ASCII 字符串。
  • a 表示 "ASCII",表明函数可以将 ASCII 字符串转换回原始格式。
  • tob 是 "to binary" 的缩写,表示函数将数据从 ASCII 字符串转换为二进制格式。

代码示例:

const encodedString = 'SGVsbG8sIFdvcmxkIQ==';
const originalString = atob(encodedString);
console.log(originalString); // 输出:Hello, World!

  1. Base64 的名称源自它使用了 64 个字符的 ASCII 子集来表示二进制数据。具体来说,Base64 使用了大小写字母 A-Z、a-z、数字 0-9 以及两个额外的特殊字符 "+" 和 "/"(有时还会有 "=" 符号用于填充)。


    Base64 编码原理很简单:每 3 个字节(24 位)的数据被分割成 4 个 6 位的组合,然后再转换成对应的 ASCII 字符。如果原始数据的字节数不是 3 的倍数,则会在末尾添加一个或两个填充字符(通常是 "=")。


    解码时,将 4 个 Base64 字符组合成 3 个字节的形式。


    Base64 编码的优点包括:


    a. 可读性:Base64 编码使用 ASCII 字符,因此可以在文本环境中容易处理和传输。


    b. 广泛支持:Base64 编码和解码算法在各种编程语言和网络传输协议中都有广泛支持,使得数据可以在不同平台之间进行可靠和兼容的传输。


    c. 安全性:由于 Base64 编码后的数据只包含 ASCII 字符,而不是原始二进制数据,因此可以安全地传输(例如,通过电子邮件)而无需担心字符集或二进制数据导致的问题。
    需要明确的是,Base64 编码不是加密算法。它只是一种将二进制数据表示为文本的转换方法,并没有提供任何数据保护或隐私保密性。

总之,Base64 编码在计算机领域中广泛应用于网络传输、数据存储和数据处理等场景,旨在解决非 ASCII 字符的可靠处理和传输问题。