JS Base 64 编码解码
在网络传输中,经常会涉及到对数据进行 Base 64 编码和解码操作。Base 64 是一种用于将二进制数据转换成 ASCII 字符串的编码方式,它常用于在URL、cookie、网页传输等场景中。在JavaScript中,我们可以使用内置的方法来进行 Base 64 编码和解码操作。
Base 64 编码算法
Base 64 编码是一种将二进制数据转换为文本数据的编码方式,它将每三个字节转换成四个可打印字符。Base 64 编码表如下:
A-Z a-z 0-9 + /
具体的编码过程如下:
- 将输入数据按照3个字节一组进行划分
- 将每组3个字节转换为4个6位的数字
- 将这些数字按照 Base 64 编码表进行转换为可打印字符
Base 64 编码
在JavaScript中,我们可以使用btoa
方法来进行 Base 64 编码操作。btoa
方法接受一个字符串作为参数,并返回经过 Base 64 编码后的结果。
let data = "Hello, World!";
let base64Encoded = btoa(data);
console.log(base64Encoded);
运行以上代码,输出为:
SGVsbG8sIFdvcmxkIQ==
Base 64 解码
在JavaScript中,我们可以使用atob
方法来进行 Base 64 解码操作。atob
方法接受一个 Base 64 编码后的字符串作为参数,并返回解码后的原始数据。
let base64Encoded = "SGVsbG8sIFdvcmxkIQ==";
let originalData = atob(base64Encoded);
console.log(originalData);
运行以上代码,输出为:
Hello, World!
使用 ArrayBuffer 编码解码
除了直接对字符串进行 Base 64 编码解码外,我们还可以使用 ArrayBuffer 来进行更细粒度的操作。
Base 64 编码
function base64ArrayBuffer(arrayBuffer) {
let binary = '';
let bytes = new Uint8Array(arrayBuffer);
for (let i = 0; i < bytes.byteLength; i++) {
binary += String.fromCharCode(bytes[i]);
}
return btoa(binary);
}
let data = new ArrayBuffer(5);
let view = new Uint8Array(data);
view[0] = 72; // H
view[1] = 101; // e
view[2] = 108; // l
view[3] = 108; // l
view[4] = 111; // o
let base64Encoded = base64ArrayBuffer(data);
console.log(base64Encoded);
输出为:
SGVsbG8=
Base 64 解码
function arrayBufferFromBase64(base64) {
let binary = atob(base64);
let bytes = new Uint8Array(binary.length);
for (let i = 0; i < binary.length; i++) {
bytes[i] = binary.charCodeAt(i);
}
return bytes.buffer;
}
let base64Encoded = "SGVsbG8=";
let decodedData = arrayBufferFromBase64(base64Encoded);
let view = new Uint8Array(decodedData);
for (let i = 0; i < view.length; i++) {
console.log(view[i]); // 72 101 108 108 111
}
以上代码将输出解码后的 ArrayBuffer 中的内容。
总结
在JavaScript中,我们可以使用内置的方法对数据进行 Base 64 编码和解码操作。通过这些方法,我们可以方便地在网络传输和数据存储中使用 Base 64 编码来处理二进制数据。同时,我们还可以通过操作 ArrayBuffer 来进行更灵活和细粒度的 Base 64 编码解码操作。Base 64 编码是一个常用且实用的数据编码方式,在实际开发中有着广泛的应用场景。