(function(){function t(t){this.message=t}var e="undefined"!=typeof exports?exports:this,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";t.prototype=Error(),t.prototype.name="InvalidCharacterError",e.btoa||(e.btoa=function(e){for(var o,n,a=0,i=r,c="";e.charAt(0|a)||(i="=",a%1);c+=i.charAt(63&o>>8-8*(a%1))){if(n=e.charCodeAt(a+=.75),n>255)throw new t("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");o=o<<8|n}return c}),e.atob||(e.atob=function(e){if(e=e.replace(/=+$/,""),1==e.length%4)throw new t("'atob' failed: The string to be decoded is not correctly encoded.");for(var o,n,a=0,i=0,c="";n=e.charAt(i++);~n&&(o=a%4?64*o+n:n,a++%4)?c+=String.fromCharCode(255&o>>(6&-2*a)):0)n=r.indexOf(n);return c})})();
(function (root, factory) {if (typeof define === 'function' && define.amd) {// AMD. Register as an anonymous module.define([], function() {factory(root);});} else factory(root);// node.js has always supported base64 conversions, while browsers that support// web workers support base64 too, but you may never know.})(typeof exports !== "undefined" ? exports : this, function(root) {if (root.atob) {// Some browsers' implementation of atob doesn't support whitespaces// in the encoded string (notably, IE). This wraps the native atob// in a function that strips the whitespaces.// The original function can be retrieved in atob.originaltry {root.atob(" ");} catch(e) {root.atob = (function(atob) {var func = function(string) {return atob(String(string).replace(/[\t\n\f\r ]+/g, ""));};func.original = atob;return func;})(root.atob);}return;}
// base64 character set, plus padding character (=)var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",// Regular expression to check formal correctness of base64 encoded stringsb64re = /^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/;
root.btoa = function(string) {string = String(string);var bitmap, a, b, c,result = "", i = 0,rest = string.length % 3; // To determine the final padding
for (; i < string.length;) {if ((a = string.charCodeAt(i++)) > 255|| (b = string.charCodeAt(i++)) > 255|| (c = string.charCodeAt(i++)) > 255)throw new TypeError("Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.");
bitmap = (a << 16) | (b << 8) | c;result += b64.charAt(bitmap >> 18 & 63) + b64.charAt(bitmap >> 12 & 63)+ b64.charAt(bitmap >> 6 & 63) + b64.charAt(bitmap & 63);}
// If there's need of padding, replace the last 'A's with equal signsreturn rest ? result.slice(0, rest - 3) + "===".substring(rest) : result;};
root.atob = function(string) {// atob can work with strings with whitespaces, even inside the encoded part,// but only \t, \n, \f, \r and ' ', which can be stripped.string = String(string).replace(/[\t\n\f\r ]+/g, "");if (!b64re.test(string))throw new TypeError("Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.");
// Adding the padding if missing, for semplicitystring += "==".slice(2 - (string.length & 3));var bitmap, result = "", r1, r2, i = 0;for (; i < string.length;) {bitmap = b64.indexOf(string.charAt(i++)) << 18 | b64.indexOf(string.charAt(i++)) << 12| (r1 = b64.indexOf(string.charAt(i++))) << 6 | (r2 = b64.indexOf(string.charAt(i++)));
result += r1 === 64 ? String.fromCharCode(bitmap >> 16 & 255): r2 === 64 ? String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255): String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255, bitmap & 255);}return result;};});
//Buffer() requires a number, array or string as the first parameter, and an optional encoding type as the second parameter.// The default is "utf8". Possible encoding types are "ascii", "utf8", "ucs2", "base64", "binary", and "hex"var b = Buffer.from('JavaScript');// If we don't use toString(), JavaScript assumes we want to convert the object to utf8.// We can make it convert to other formats by passing the encoding type to toString().var s = b.toString('base64');
以下是解码bas64编码字符串的方法:
var b = new Buffer('SmF2YVNjcmlwdA==', 'base64')var s = b.toString();
用Dojo.js
要使用dojox.encoding.base64对字节数组进行编码:
var str = dojox.encoding.base64.encode(myByteArray);
str = "The quick brown fox jumps over the lazy dog";
$('input').val(str);
$('#btnConv').click(function(){var txt = $('input').val();var b64 = btoa(unescape(encodeURIComponent(txt)));$('input').val(b64);$('#btnDeConv').show();});$('#btnDeConv').click(function(){var b64 = $('input').val();var txt = decodeURIComponent(escape(window.atob(b64)));$('input').val(txt);});
var str = "I was funny 😂";console.log("Original string:", str);
var encodedStr = Base64.encode(str)console.log("Encoded string:", encodedStr);
var decodedStr = Base64.decode(encodedStr)console.log("Decoded string:", decodedStr);
This function is only provided for compatibility with legacy web platform APIs and should never be used in new code,because they use strings to represent binary data and predate the introduction of typed arrays in JavaScript.For code running using Node.js APIs,converting between base64-encoded strings and binary data should be performed using Buffer.from(str, 'base64') andbuf.toString('base64').
base64url (s) {var to64url = btao(s);// Replace non-url compatible chars with base64url standard chars and remove leading =return to64url.replace(/\+/g, '_').replace(/\//g, '-').replace(/=+$/g, '');}