Base64编码是一种常见的数据编码格式,它可以将二进制数据转换为文本格式,以便在文本协议中传输。Base64编码使用64个字符来表示二进制数据,这些字符包括大写字母A-Z、小写字母a-z、数字0-9以及符号"+"和"/"。在某些情况下,还会使用"="作为填充字符。
Base64编码的基本原理是将每3个字节(24位)的二进制数据转换为4个6位的块,然后将每个6位的块映射到一个Base64字符。如果原始数据的字节数不是3的倍数,则会在末尾添加一个或两个0字节,并在编码结果中使用"="字符进行填充。
JavaScript提供了内置的方法来实现Base64编码和解码。以下是一些示例代码:
const str = "Hello, World!";
const encodedStr = btoa(str);
console.log(encodedStr); // 输出: "SGVsbG8sIFdvcmxkIQ=="
function urlSafeBase64Encode(str) {
return btoa(str).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
}
const str = "Hello, World!";
const encodedStr = urlSafeBase64Encode(str);
console.log(encodedStr); // 输出: "SGVsbG8sIFdvcmxkIQ"
const encodedStr = "SGVsbG8sIFdvcmxkIQ==";
const decodedStr = atob(encodedStr);
console.log(decodedStr); // 输出: "Hello, World!"
原因:btoa
方法不支持非ASCII字符。
解决方法:先将字符串转换为UTF-8编码的二进制数据,再进行Base64编码。
function utf8ToBase64(str) {
return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
return String.fromCharCode('0x' + p1);
}));
}
const str = "你好,世界!";
const encodedStr = utf8ToBase64(str);
console.log(encodedStr); // 输出: "5L2g5aW977yM5LiW55WM77yB"
通过这些方法,你可以有效地在JavaScript中实现Base64编码和解码,并处理常见的编码问题。
领取专属 10元无门槛券
手把手带您无忧上云