online - Codificación y decodificación de Base64 en Javascript del lado del cliente
decodificar base64 javascript (12)
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
Reescritas y modularizadas UTF-8 y Base64 Codificación y decodificación de bibliotecas / módulos para AMD, CommonJS, Nodejs y navegadores. Compatible con varios navegadores.
con Node.js
Aquí es cómo codificar el texto normal a 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 aquí es cómo decodificar cadenas codificadas en base64:
var b = new Buffer(''SmF2YVNjcmlwdA=='', ''base64'')
var s = b.toString();
con Dojo.js
Para codificar una matriz de bytes utilizando dojox.encoding.base64:
var str = dojox.encoding.base64.encode(myByteArray);
Para decodificar una cadena codificada en base64:
var bytes = dojox.encoding.base64.decode(str)
Bower instalar angular-base64
<script src="bower_components/angular-base64/angular-base64.js"></script>
angular
.module(''myApp'', [''base64''])
.controller(''myController'', [
''$base64'', ''$scope'',
function($base64, $scope) {
$scope.encoded = $base64.encode(''a string'');
$scope.decoded = $base64.decode(''YSBzdHJpbmc='');
}]);
¿Pero cómo?
Si desea obtener más información sobre cómo se codifica en base64 en general, y en JavaScript en particular, recomendaría este artículo: Informática en JavaScript: codificación en base64
¿Hay algún método en JavaScript que pueda usarse para codificar y decodificar una cadena usando la codificación base64?
¿Alguien dijo código de golf? =)
El siguiente es mi intento de mejorar mi discapacidad mientras me pongo al día con los tiempos. Se suministra para su comodidad.
function decode_base64(s) {
var b=l=0, r='''',
m=''ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'';
s.split('''').forEach(function (v) {
b=(b<<6)+m.indexOf(v); l+=6;
if (l>=8) r+=String.fromCharCode((b>>>(l-=8))&0xff);
});
return r;
}
Lo que realmente forEach
era una implementación asíncrona y, para mi sorpresa, resultó para forEach
en lugar de $([]).each
JQuery $([]).each
implementación de método es muy sincrónica.
Si también tenía en mente tales nociones locas, una window.setTimeout
retardo window.setTimeout
ejecutará la decodificación base64 de forma asíncrona y ejecutará la función de devolución de llamada con el resultado cuando termine.
function decode_base64_async(s, cb) {
setTimeout(function () { cb(decode_base64(s)); }, 0);
}
@Toothbrush sugirió "indexar una cadena como una matriz" y deshacerse de la split
. Esta rutina parece realmente extraña y no estoy segura de qué tan compatible será, pero sí afecta a otro pajarito, así que dejémosla.
function decode_base64(s) {
var b=l=0, r='''',
m=''ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'';
[].forEach.call(s, function (v) {
b=(b<<6)+m.indexOf(v); l+=6;
if (l>=8) r+=String.fromCharCode((b>>>(l-=8))&0xff);
});
return r;
}
Al tratar de encontrar más información sobre la cadena de JavaScript como matriz, me topé con esta sugerencia profesional utilizando una /./g
regular /./g
para pasar por una cadena. Esto reduce el tamaño del código aún más al reemplazar la cadena en su lugar y eliminar la necesidad de mantener una variable de retorno.
function decode_base64(s) {
var b=l=0,
m=''ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'';
return s.replace(/./g, function (v) {
b=(b<<6)+m.indexOf(v); l+=6;
return l<8?'''':String.fromCharCode((b>>>(l-=8))&0xff);
});
}
Sin embargo, si estaba buscando algo un poco más tradicional, quizás lo siguiente sea más de su gusto.
function decode_base64(s) {
var b=l=0, r='''', s=s.split(''''), i,
m=''ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'';
for (i in s) {
b=(b<<6)+m.indexOf(s[i]); l+=6;
if (l>=8) r+=String.fromCharCode((b>>>(l-=8))&0xff);
}
return r;
}
No tuve el problema nulo final, por lo que se eliminó para permanecer por debajo del par, pero debería resolverse fácilmente con un trim()
o un trimRight()
si así lo prefieres, si esto te plantea algún problema.
es decir.
return r.trimRight();
Nota:
El resultado es una cadena de bytes ascii, si necesita unicode, lo más fácil es escape
la cadena de bytes que luego puede decodificarse con decodeURIComponent
para producir la cadena unicode.
function decode_base64_usc(s) {
return decodeURIComponent(escape(decode_base64(s)));
}
Ya que el escape
está en desuso, podríamos cambiar nuestra función para que sea compatible con Unicode directamente sin la necesidad de escape
o String.fromCharCode
podemos producir una cadena %
escapada lista para la decodificación URI.
function decode_base64(s) {
var b=l=0,
m=''ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'';
return decodeURIComponent(s.replace(/./g, function (v) {
b=(b<<6)+m.indexOf(v); l+=6;
return l<8?'''':''%''+(0x100+((b>>>(l-=8))&0xff)).toString(16).slice(-2);
}));
}
nJoy!
Aquí está una versión ajustada de la publicación de Sniper. Supone una cadena base64 bien formada sin retornos de carro. Esta versión elimina un par de bucles, agrega la solución &0xff
de Yaroslav, elimina los nulos finales, más un poco de código de golf.
decodeBase64 = function(s) {
var e={},i,b=0,c,x,l=0,a,r='''',w=String.fromCharCode,L=s.length;
var A="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
for(i=0;i<64;i++){e[A.charAt(i)]=i;}
for(x=0;x<L;x++){
c=e[s.charAt(x)];b=(b<<6)+c;l+=6;
while(l>=8){((a=(b>>>(l-=8))&0xff)||(x<(L-2)))&&(r+=w(a));}
}
return r;
};
El proyecto php.js tiene implementaciones de JavaScript de muchas de las funciones de PHP. Se incluyen base64_encode
y base64_decode
.
En Node.js podemos hacerlo de forma sencilla.
var base64 = ''SGVsbG8gV29ybGQ=''
var base64_decode = new Buffer(base64, ''base64'').toString(''ascii'');
console.log(base64_decode); // "Hello World"
En los navegadores basados en Gecko / WebKit (Firefox, Chrome y Safari) y Opera, puede usar btoa() y atob() .
Respuesta original: ¿Cómo puedes codificar una cadena a Base64 en JavaScript?
Esta es la mejor manera de basar_codigo_64 y código_digital_64 usando javascript. Vea a continuación los enlaces.
Función de decodificación de JavaScript de Base64 corta y rápida sin Failsafe:
function decode_base64 (s)
{
var e = {}, i, k, v = [], r = '''', w = String.fromCharCode;
var n = [[65, 91], [97, 123], [48, 58], [43, 44], [47, 48]];
for (z in n)
{
for (i = n[z][0]; i < n[z][1]; i++)
{
v.push(w(i));
}
}
for (i = 0; i < 64; i++)
{
e[v[i]] = i;
}
for (i = 0; i < s.length; i+=72)
{
var b = 0, c, x, l = 0, o = s.substring(i, i+72);
for (x = 0; x < o.length; x++)
{
c = e[o.charAt(x)];
b = (b << 6) + c;
l += 6;
while (l >= 8)
{
r += w((b >>> (l -= 8)) % 256);
}
}
}
return r;
}
He probado las rutinas de Javascript en phpjs.org y han funcionado bien.
Primero probé las rutinas sugeridas en la respuesta elegida por Ranhiru Cooray - http://ntt.cc/2008/01/19/base64-encoder-decoder-with-javascript.html
Descubrí que no funcionaban en todas las circunstancias. Escribí un caso de prueba donde estas rutinas fallan y las publiqué en GitHub en:
https://github.com/scottcarter/base64_javascript_test_data.git
También publiqué un comentario en la publicación del blog en ntt.cc para alertar al autor (en espera de la moderación: el artículo es antiguo, así que no estoy seguro de si se publicará el comentario).
Algunos navegadores como Firefox, Chrome, Safari, Opera e IE10 + pueden manejar Base64 de forma nativa. Echa un vistazo a esta pregunta . Está usando las btoa()
y atob()
.
Para JavaScript del lado del servidor, hay un paquete btoa para Node.JS.
Si va a buscar una solución de navegador cruzado, existen bibliotecas como CryptoJS o códigos como:
http://ntt.cc/2008/01/19/base64-encoder-decoder-with-javascript.html
Con este último, debe probar minuciosamente la función para la compatibilidad entre navegadores. Y el error ya ha sido reportado .
function b64_to_utf8( str ) {
return decodeURIComponent(escape(window.atob( str )));
}
https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#The_.22Unicode_Problem.22