JavaScript三行程式碼實現base64的編碼和解碼
阿新 • • 發佈:2019-02-13
好吧,做了回標題黨==
但是,說的的確也沒錯。不需要使用其他的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