js解析base64

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";      var base64DecodeChars = new Array(          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,          52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,          -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,          15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,         -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,         41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);     //编码的方法     function base64encode(str) {         var out, i, len;         var c1, c2, c3;         len = str.length;         i = 0;         out = "";         while(i < len) {        c1 = str.charCodeAt(i++) & 0xff;         if(i == len)         {             out += base64EncodeChars.charAt(c1 >> 2);             out += base64EncodeChars.charAt((c1 & 0x3) << 4);             out += "==";             break;         }         c2 = str.charCodeAt(i++);         if(i == len)         {             out += base64EncodeChars.charAt(c1 >> 2);             out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));             out += base64EncodeChars.charAt((c2 & 0xF) << 2);             out += "=";             break;         }         c3 = str.charCodeAt(i++);         out += base64EncodeChars.charAt(c1 >> 2);         out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));        out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0)>>6));         out += base64EncodeChars.charAt(c3 & 0x3F);         }         return out;     }     //解码的方法     function base64decode(str) {         var c1, c2, c3, c4;         var i, len, out;         len = str.length;         i = 0;         out = "";         while(i < len) {                   do {             c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];        while(i < len && c1 == -1);        if(c1 == -1)             break;                   do {             c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];         while(i < len && c2 == -1);         if(c2 == -1)             break;         out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));                   do {             c3 = str.charCodeAt(i++) & 0xff;             if(c3 == 61)             return out;             c3 = base64DecodeChars[c3];         while(i < len && c3 == -1);         if(c3 == -1)             break;         out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));                   do {             c4 = str.charCodeAt(i++) & 0xff;             if(c4 == 61)             return out;             c4 = base64DecodeChars[c4];         while(i < len && c4 == -1);         if(c4 == -1)             break;         out += String.fromCharCode(((c3 & 0x03) << 6) | c4);         }         return out;     }     function utf16to8(str) {         var out, i, len, c;         out = "";         len = str.length;         for(i = 0; i < len; i++) {         c = str.charCodeAt(i);         if ((c >= 0x0001) && (c <= 0x007F)) {             out += str.charAt(i);         else if (c > 0x07FF) {             out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));             out += String.fromCharCode(0x80 | ((c >>  6) & 0x3F));            out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));        else {            out += String.fromCharCode(0xC0 | ((c >>  6) & 0x1F));            out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));        }        }        return out;    }   function utf8to16(str) {        var out, i, len, c;        var char2, char3;        out = "";        len = str.length;        i = 0;        while(i < len) {        c = str.charCodeAt(i++);        switch(c >> 4)        {          case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:            // 0xxxxxxx            out += str.charAt(i-1);            break;          case 12: case 13:            // 110x xxxx   10xx xxxx            char2 = str.charCodeAt(i++);            out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));            break;          case 14:            // 1110 xxxx  10xx xxxx  10xx xxxx            char2 = str.charCodeAt(i++);            char3 = str.charCodeAt(i++);            out += String.fromCharCode(((c & 0x0F) << 12) |                           ((char2 & 0x3F) << 6) |                           ((char3 & 0x3F) << 0));            break;        }        }        return out;   }

  调用方法:

1 2 3 4 5 //编码  value = base64encode(utf16to8(src))       //解码 value = utf8to16(base64decode(src))
上一篇:手写数字识别


下一篇:网络数据转换为图片