JAVASCRIPT BASE64編碼與解碼

來源:互聯網
上載者:User

標籤:JAVASCRIPT BASE64編碼與

  • 代碼:
    var Base64 = {// 轉碼錶table : [        ‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘, ‘F‘, ‘G‘, ‘H‘,        ‘I‘, ‘J‘, ‘K‘, ‘L‘, ‘M‘, ‘N‘, ‘O‘ ,‘P‘,        ‘Q‘, ‘R‘, ‘S‘, ‘T‘, ‘U‘, ‘V‘, ‘W‘, ‘X‘,        ‘Y‘, ‘Z‘, ‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘f‘,        ‘g‘, ‘h‘, ‘i‘, ‘j‘, ‘k‘, ‘l‘, ‘m‘, ‘n‘,        ‘o‘, ‘p‘, ‘q‘, ‘r‘, ‘s‘, ‘t‘, ‘u‘, ‘v‘,        ‘w‘, ‘x‘, ‘y‘, ‘z‘, ‘0‘, ‘1‘, ‘2‘, ‘3‘,        ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘, ‘+‘, ‘/‘],UTF16ToUTF8 : function(str) {    var res = [], len = str.length;    for (var i = 0; i < len; i++) {        var code = str.charCodeAt(i);        if (code > 0x0000 && code <= 0x007F) {            // 單位元組,這裡並不考慮0x0000,因為它是空位元組            // U+00000000 – U+0000007F  0xxxxxxx            res.push(str.charAt(i));        } else if (code >= 0x0080 && code <= 0x07FF) {            // 雙位元組            // U+00000080 – U+000007FF  110xxxxx 10xxxxxx            // 110xxxxx            var byte1 = 0xC0 | ((code >> 6) & 0x1F);            // 10xxxxxx            var byte2 = 0x80 | (code & 0x3F);            res.push(                String.fromCharCode(byte1),                 String.fromCharCode(byte2)            );        } else if (code >= 0x0800 && code <= 0xFFFF) {            // 三位元組            // U+00000800 – U+0000FFFF  1110xxxx 10xxxxxx 10xxxxxx            // 1110xxxx            var byte1 = 0xE0 | ((code >> 12) & 0x0F);            // 10xxxxxx            var byte2 = 0x80 | ((code >> 6) & 0x3F);            // 10xxxxxx            var byte3 = 0x80 | (code & 0x3F);            res.push(                String.fromCharCode(byte1),                 String.fromCharCode(byte2),                 String.fromCharCode(byte3)            );        } else if (code >= 0x00010000 && code <= 0x001FFFFF) {            // 四位元組            // U+00010000 – U+001FFFFF  11110xxx 10xxxxxx 10xxxxxx 10xxxxxx        } else if (code >= 0x00200000 && code <= 0x03FFFFFF) {            // 五位元組            // U+00200000 – U+03FFFFFF  111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx        } else /** if (code >= 0x04000000 && code <= 0x7FFFFFFF)*/ {            // 六位元組            // U+04000000 – U+7FFFFFFF  1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx        }    }    return res.join(‘‘);},UTF8ToUTF16 : function(str) {    var res = [], len = str.length;    var i = 0;    for (var i = 0; i < len; i++) {        var code = str.charCodeAt(i);        // 對第一個位元組進行判斷        if (((code >> 7) & 0xFF) == 0x0) {            // 單位元組            // 0xxxxxxx            res.push(str.charAt(i));        } else if (((code >> 5) & 0xFF) == 0x6) {            // 雙位元組            // 110xxxxx 10xxxxxx            var code2 = str.charCodeAt(++i);            var byte1 = (code & 0x1F) << 6;            var byte2 = code2 & 0x3F;            var utf16 = byte1 | byte2;            res.push(String.fromCharCode(utf16));        } else if (((code >> 4) & 0xFF) == 0xE) {            // 三位元組            // 1110xxxx 10xxxxxx 10xxxxxx            var code2 = str.charCodeAt(++i);            var code3 = str.charCodeAt(++i);            var byte1 = (code << 4) | ((code2 >> 2) & 0x0F);            var byte2 = ((code2 & 0x03) << 6) | (code3 & 0x3F);            var utf16 = ((byte1 & 0x00FF) << 8) | byte2            res.push(String.fromCharCode(utf16));        } else if (((code >> 3) & 0xFF) == 0x1E) {            // 四位元組            // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx        } else if (((code >> 2) & 0xFF) == 0x3E) {            // 五位元組            // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx        } else /** if (((code >> 1) & 0xFF) == 0x7E)*/ {            // 六位元組            // 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx        }    }    return res.join(‘‘);},encode : function(str) {    if (!str) {        return ‘‘;    }    var utf8    = this.UTF16ToUTF8(str); // 轉成UTF8    var i = 0; // 遍曆索引    var len = utf8.length;    var res = [];    while (i < len) {        var c1 = utf8.charCodeAt(i++) & 0xFF;        res.push(this.table[c1 >> 2]);        // 需要補2個=        if (i == len) {            res.push(this.table[(c1 & 0x3) << 4]);            res.push(‘==‘);            break;        }        var c2 = utf8.charCodeAt(i++);        // 需要補1個=        if (i == len) {            res.push(this.table[((c1 & 0x3) << 4) | ((c2 >> 4) & 0x0F)]);            res.push(this.table[(c2 & 0x0F) << 2]);            res.push(‘=‘);            break;        }        var c3 = utf8.charCodeAt(i++);        res.push(this.table[((c1 & 0x3) << 4) | ((c2 >> 4) & 0x0F)]);        res.push(this.table[((c2 & 0x0F) << 2) | ((c3 & 0xC0) >> 6)]);        res.push(this.table[c3 & 0x3F]);    }    return res.join(‘‘);},decode : function(str) {    if (!str) {        return ‘‘;    }    var len = str.length;    var i   = 0;    var res = [];    while (i < len) {        code1 = this.table.indexOf(str.charAt(i++));        code2 = this.table.indexOf(str.charAt(i++));        code3 = this.table.indexOf(str.charAt(i++));        code4 = this.table.indexOf(str.charAt(i++));        c1 = (code1 << 2) | (code2 >> 4);        res.push(String.fromCharCode(c1));        if (code3 != -1) {            c2 = ((code2 & 0xF) << 4) | (code3 >> 2);            res.push(String.fromCharCode(c2));        }        if (code4 != -1) {            c3 = ((code3 & 0x3) << 6) | code4;            res.push(String.fromCharCode(c3));        }    }    return this.UTF8ToUTF16(res.join(‘‘));}};
  • 樣本:
    var a = Base64.encode(‘小火柴‘)console.log(a)  #  輸出  5bCP54Gr5p+0var b = Base64.decode(a)  console.log(b)  #  輸出  小火柴
  • JAVASCRIPT BASE64編碼與解碼

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.