好吧,做了回标题党==
但是,说的的确也没错。不需要使用其他的js库,也可以轻松的实现base64
的编码和解码,不信你可以往下看。
基本方法
编码:
btoa()
你可以使用window.btoa(str)
来将一个字符串编码成base64的字符串。
解码:
atob()
window.atob(str)
可以将一个base64编码后的字符串解码。
参数如果不是正确的base64编码后的话,该方法会抛出DOMException
的异常。
Unicode问题
如果有字符超出了8位ASCII编码的字符范围时,在大多数的浏览器中对Unicode字符串调用 window.btoa
将会造成一个 Character Out Of Range
的异常。比如:
解决方案
方案1:转义(escape)整个字符串然后编码这个它
编码:
function b64EncodeUnicode(str) {
return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
return String.fromCharCode('0x' + p1);
}));
}
运行一下可以看到,编码成功!
解码:
function b64DecodeUnicode(str) {
return decodeURIComponent(atob(str).split('').map(function(c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
}).join(''));
}
解码刚才的编码后的“科比”,成功!
方案2: 将UTF-16的 DOMString 转码为UTF-8的字符数组然后编码它
这一方案的实现,可以参考js库:base64.js
参考文档:
本文主要参考MDN WEB DOCS的这篇文章:https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding