btoa atob 与 base64,以及btoa报错
在 JavaScript 中,btoa
和 atob
是两个用于 Base64 编码和解码的函数。下面是对这两个函数以及 Base64 的解释和代码示例:
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'
注意: base64 转换时去除 "data:image/png;base64,", 只要后面的文件流, 否则 atob 报错
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!
- 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 字符的可靠处理和传输问题。
生活不易,请继续努力,在未来的路上,愿你步伐坚定且内心温柔。——ziChin