1. 程式人生 > >JavaScript三行程式碼實現base64的編碼和解碼

JavaScript三行程式碼實現base64的編碼和解碼

好吧,做了回標題黨==
但是,說的的確也沒錯。不需要使用其他的js庫,也可以輕鬆的實現base64的編碼和解碼,不信你可以往下看。

基本方法

  • 編碼: btoa()
    你可以使用window.btoa(str)來將一個字串編碼成base64的字串。
    base64-01
  • 解碼: atob()
    window.atob(str)可以將一個base64編碼後的字串解碼。
    base64-02
    引數如果不是正確的base64編碼後的話,該方法會丟擲DOMException的異常。

base64-03

Unicode問題

如果有字元超出了8位ASCII編碼的字元範圍時,在大多數的瀏覽器中對Unicode字串呼叫 window.btoa 將會造成一個 Character Out Of Range

的異常。比如:
base64-04

解決方案

方案1:轉義(escape)整個字串然後編碼這個它

編碼:

function b64EncodeUnicode(str) {
    return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
        return String.fromCharCode('0x' + p1);
    }));
}

執行一下可以看到,編碼成功!
base64-05
解碼:

function b64DecodeUnicode(str) {
    return decodeURIComponent
(atob(str).split('').map(function(c) { return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); }).join('')); }

解碼剛才的編碼後的“科比”,成功!
base64-06

方案2: 將UTF-16的 DOMString 轉碼為UTF-8的字元陣列然後編碼它

這一方案的實現,可以參考js庫:base64.js

參考文件: