| 2990 | */ |
| 2991 | //base64 完毕 |
| 2992 | function Base64Code() { |
| 2993 | // constants |
| 2994 | var b64chars |
| 2995 | = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; |
| 2996 | var b64tab = function (bin) { |
| 2997 | var t = {}; |
| 2998 | for (var i = 0, l = bin.length; i < l; i++) t[bin.charAt(i)] = i; |
| 2999 | return t; |
| 3000 | }(b64chars); |
| 3001 | var fromCharCode = String.fromCharCode; |
| 3002 | // encoder stuff |
| 3003 | var cb_utob = function (c) { |
| 3004 | if (c.length < 2) { |
| 3005 | var cc = c.charCodeAt(0); |
| 3006 | return cc < 0x80 ? c |
| 3007 | : cc < 0x800 ? (fromCharCode(0xc0 | (cc >>> 6)) |
| 3008 | + fromCharCode(0x80 | (cc & 0x3f))) |
| 3009 | : (fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) |
| 3010 | + fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) |
| 3011 | + fromCharCode(0x80 | (cc & 0x3f))); |
| 3012 | } else { |
| 3013 | var cc = 0x10000 |
| 3014 | + (c.charCodeAt(0) - 0xD800) * 0x400 |
| 3015 | + (c.charCodeAt(1) - 0xDC00); |
| 3016 | return (fromCharCode(0xf0 | ((cc >>> 18) & 0x07)) |
| 3017 | + fromCharCode(0x80 | ((cc >>> 12) & 0x3f)) |
| 3018 | + fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) |
| 3019 | + fromCharCode(0x80 | (cc & 0x3f))); |
| 3020 | } |
| 3021 | }; |
| 3022 | var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g; |
| 3023 | var utob = function (u) { |
| 3024 | return u.replace(re_utob, cb_utob); |
| 3025 | }; |
| 3026 | var cb_encode = function (ccc) { |
| 3027 | var padlen = [0, 2, 1][ccc.length % 3], |
| 3028 | ord = ccc.charCodeAt(0) << 16 |
| 3029 | | ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) |
| 3030 | | ((ccc.length > 2 ? ccc.charCodeAt(2) : 0)), |
| 3031 | chars = [ |
| 3032 | b64chars.charAt(ord >>> 18), |
| 3033 | b64chars.charAt((ord >>> 12) & 63), |
| 3034 | padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63), |
| 3035 | padlen >= 1 ? '=' : b64chars.charAt(ord & 63) |
| 3036 | ]; |
| 3037 | return chars.join(''); |
| 3038 | }; |
| 3039 | var btoa = function (b) { |
| 3040 | return b.replace(/[\s\S]{1,3}/g, cb_encode); |
| 3041 | }; |
| 3042 | // var _encode = function(u) { |
| 3043 | // var isUint8Array = Object.prototype.toString.call(u) === '[object Uint8Array]'; |
| 3044 | // return isUint8Array ? u.toString('base64') |
| 3045 | // : btoa(utob(String(u))); |
| 3046 | // } |
| 3047 | this.encode = function (u) { |
| 3048 | var isUint8Array = Object.prototype.toString.call(u) === '[object Uint8Array]'; |
| 3049 | return isUint8Array ? u.toString('base64') |