Base64 是一种用于编码二进制数据至 ASCII 字符串的编码方案,广泛应用于电子邮件传输、网页内容编码等领域。在 JavaScript 中进行 Base64 编码和解码时,需要注意字符集的处理,特别是对于中文字符。
Base64 编码将每3个字节(24位)的二进制数据转换为4个ASCII字符。解码则是这个过程的逆过程,将4个ASCII字符转换回原始的二进制数据。
JavaScript 提供了 atob()
函数来解码 Base64 编码的字符串。但是,atob()
函数在处理包含非 ASCII 字符(如中文)的字符串时会出现问题,因为它默认处理的是Latin1字符集。
对于包含中文的 Base64 编码字符串,需要先将编码字符串解码为二进制数据,然后再将这些二进制数据转换为正确的字符编码(通常是 UTF-8)。
以下是一个 JavaScript 函数,用于正确解码包含中文的 Base64 字符串:
function base64Decode(str) {
// 解码 Base64 字符串
let binaryStr = atob(str);
let len = binaryStr.length;
let bytes = new Uint8Array(len);
for (let i = 0; i < len; i++) {
bytes[i] = binaryStr.charCodeAt(i);
}
// 将二进制数据转换为 UTF-8 字符串
return new TextDecoder('utf-8').decode(bytes);
}
// 使用示例
let encodedStr = "5Lit5paH5a2X56ym5Liy"; // 这是 "中文测试" 的 Base64 编码
let decodedStr = base64Decode(encodedStr);
console.log(decodedStr); // 输出: 中文测试
atob(str)
: 将 Base64 编码的字符串解码为二进制字符串。Uint8Array
: 创建一个字节数组来存储每个字符的 Unicode 编码。TextDecoder('utf-8')
: 使用 UTF-8 编码将字节数组转换为字符串。atob()
和 btoa()
,需要通过上述方法进行处理。通过这种方式,可以正确处理包含中文或其他非 ASCII 字符的 Base64 编码和解码。
领取专属 10元无门槛券
手把手带您无忧上云