Recabamos en distintos sitios y así traerte la solución a tu problema, en caso de alguna inquietud déjanos la inquietud y contestaremos porque estamos para servirte.
Solución:
Puedes usar btoa()
y atob()
para convertir desde y hacia la codificación base64.
Parece haber cierta confusión en los comentarios con respecto a lo que aceptan / devuelven estas funciones, así que …
-
btoa()
acepta un “string”Donde cada carácter representa un byte de 8 bits, si pasa un string contiene caracteres que no se pueden representar en 8 bits, probablemente se romperá. Esto no es un problema si en realidad estás tratando el string como un byte array, pero si está intentando hacer otra cosa, primero tendrá que codificarlo. -
atob()
devuelve un “string”Donde cada carácter representa un byte de 8 bits, es decir, su valor estará entre0
y0xff
. Esto hace no significa que es ASCII; presumiblemente, si está utilizando esta función, espera trabajar con datos binarios y no con texto.
Ver también:
- ¿Cómo cargo datos de imágenes binarias usando Javascript y XMLHttpRequest?
La mayoría de los comentarios aquí están desactualizados. Probablemente puedas usar ambos btoa()
y atob()
, a menos que sea compatible con navegadores realmente obsoletos.
Chequea aquí:
- https://caniuse.com/?search=atob
- https://caniuse.com/?search=btoa
De aquí:
/**
*
* Base64 encode / decode
* http://www.webtoolkit.info/
*
**/
var Base64 =
// private property
_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
// public method for encoding
encode : function (input)
var output = "";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0;
input = Base64._utf8_encode(input);
while (i < input.length) (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2))
enc3 = enc4 = 64;
else if (isNaN(chr3))
enc4 = 64;
output = output +
this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
return output;
,
// public method for decoding
decode : function (input)
var output = "";
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
input = input.replace(/[^A-Za-z0-9+/=]/g, "");
while (i < input.length)
enc1 = this._keyStr.indexOf(input.charAt(i++));
enc2 = this._keyStr.indexOf(input.charAt(i++));
enc3 = this._keyStr.indexOf(input.charAt(i++));
enc4 = this._keyStr.indexOf(input.charAt(i++));
chr1 = (enc1 << 2)
output = Base64._utf8_decode(output);
return output;
,
// private method for UTF-8 encoding
_utf8_encode : function (string)
string = string.replace(/rn/g,"n");
var utftext = "";
for (var n = 0; n < string.length; n++)
var c = string.charCodeAt(n);
if (c < 128)
utftext += String.fromCharCode(c);
else if((c > 127) && (c < 2048))
utftext += String.fromCharCode((c >> 6)
else
utftext += String.fromCharCode((c >> 12)
return utftext;
,
// private method for UTF-8 decoding
_utf8_decode : function (utftext)
var string = "";
var i = 0;
var c = c1 = c2 = 0;
while ( i < utftext.length )
c = utftext.charCodeAt(i);
if (c < 128)
string += String.fromCharCode(c);
i++;
else if((c > 191) && (c < 224))
c2 = utftext.charCodeAt(i+1);
string += String.fromCharCode(((c & 31) << 6)
else ((c2 & 63) << 6)
return string;
Además, la búsqueda de "codificación javascript base64" genera muchas otras opciones, la anterior fue la primera.
Internet Explorer 10+
// Define the string
var string = 'Hello World!';
// Encode the String
var encodedString = btoa(string);
console.log(encodedString); // Outputs: "SGVsbG8gV29ybGQh"
// Decode the String
var decodedString = atob(encodedString);
console.log(decodedString); // Outputs: "Hello World!"
Navegador cruzado
// Create Base64 Object
var Base64=_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e)var t="";var n,r,i,s,o,u,a;var f=0;e=Base64._utf8_encode(e);while(f>2;o=(n&3)<<4return t,decode:function(e)var t="";var n,r,i;var s,o,u,a;var f=0;e=e.replace(/[^A-Za-z0-9+/=]/g,"");while(f>2;i=(u&3)<<6t=Base64._utf8_decode(t);return t,_utf8_encode:function(e)e=e.replace(/rn/g,"n");var t="";for(var n=0;n127&&r<2048)192);t+=String.fromCharCode(r&63else128)return t,_utf8_decode:function(e)var t="";var n=0;var r=c1=c2=0;while(n191&&r<224)c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6elsec2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12return t
// Define the string
var string = 'Hello World!';
// Encode the String
var encodedString = Base64.encode(string);
console.log(encodedString); // Outputs: "SGVsbG8gV29ybGQh"
// Decode the String
var decodedString = Base64.decode(encodedString);
console.log(decodedString); // Outputs: "Hello World!"
jsFiddle
con Node.js
Así es como se codifica el texto normal en base64 en Node.js:
//Buffer() requires a number, array or string as the first parameter, and an optional encoding type as the second parameter.
// Default is utf8, possible encoding types are ascii, utf8, ucs2, base64, binary, and hex
var b = new Buffer('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');
Y así es como decodifica cadenas codificadas en base64:
var b = new Buffer('SmF2YVNjcmlwdA==', 'base64')
var s = b.toString();
con Dojo.js
Para codificar un array de bytes usando dojox.encoding.base64:
var str = dojox.encoding.base64.encode(myByteArray);
Para decodificar un codificado en base64 string:
var bytes = dojox.encoding.base64.decode(str)
bower instalar angular-base64
angular
.module('myApp', ['base64'])
.controller('myController', [
'$base64', '$scope',
function($base64, $scope)
$scope.encoded = $base64.encode('a string');
$scope.decoded = $base64.decode('YSBzdHJpbmc=');
]);