📅  最后修改于: 2023-12-03 15:39:16.448000             🧑  作者: Mango
Base64是一种将二进制数据编码为ASCII字符的编码方式,常用于网络传输,数据存储等场景中。在JavaScript中,我们可以使用btoa()
方法将字符串进行Base64编码,也可以使用第三方库实现更多功能。
btoa()
方法可以将字符串转换为Base64编码,使用方法如下:
let originalString = "Hello World!";
let base64EncodedString = btoa(originalString);
console.log(base64EncodedString); // "SGVsbG8gV29ybGQh"
在以上示例代码中,我们将字符串"Hello World!"
使用btoa()
方法进行Base64编码,并将结果打印到控制台中。
需要注意的是,btoa()
方法的输入参数需要是ASCII字符串,如果输入参数不属于ASCII字符集合,则需要先将其转换为ASCII字符,例如:
let nonASCIIString = "你好,世界!";
let asciiString = unescape(encodeURIComponent(nonASCIIString));
let base64EncodedString = btoa(asciiString);
console.log(base64EncodedString); // "5L2g5aW977yM5LiW56eS4oCc"
在代码中,我们首先将字符串"你好,世界!"
使用encodeURIComponent()
方法将其转换成UTF-8编码的字符串,再使用unescape()
方法将其转换为ASCII字符串。然后再使用btoa()
方法进行Base64编码。
除了btoa()
方法,我们也可以使用第三方库实现更多功能,例如:
如果我们想要将一个Base64编码的字符串转换成字节数组,可以使用第三方库pako
,使用方法如下:
// 安装pako
npm install pako
// 导入pako
import pako from 'pako';
let base64EncodedString = "H4sIAAAAAAAA/+3Pyw0AAACA0P8NVmlzaWJsZSgDAeQGkIEgAAAA=";
let byteArray = pako.inflate(atob(base64EncodedString), { to: "Uint8Array" });
console.log(byteArray); // [60, 205, 18, 89, 84, 1, 0, 0]
在以上示例代码中,我们使用atob()
方法将Base64编码的字符串转换成字节数组,然后使用pako.inflate()
方法将字节数组解压成原始数据。
如果我们想要将一个Base64编码的字符串转换成Blob对象,可以使用以下方法:
let base64EncodedString = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMD...";
let mimeType = "image/jpeg";
let byteCharacters = atob(base64EncodedString.split(',')[1]);
let byteNumbers = new Array(byteCharacters.length);
for (let i = 0; i < byteCharacters.length; i++) {
byteNumbers[i] = byteCharacters.charCodeAt(i);
}
let byteArray = new Uint8Array(byteNumbers);
let blob = new Blob([byteArray], {type: mimeType});
console.log(blob); // Blob {size: 77834, type: "image/jpeg"}
在以上示例代码中,我们将Base64编码的字符串转换成字节数组,再将字节数组转换成Blob对象。
通过以上介绍,我们学习了JavaScript中将字符串编码为Base64的方法。虽然使用btoa()
方法可以实现简单的Base64编码,但如果遇到一些特殊的场景,例如将Base64字符串转换成字节数组,转换成Blob对象等,我们可以使用第三方库实现更多功能。