Codificar cadena en Base64

Buenas estoy intentando codificar una cadena a base64 pero no lo condigo, estoy utilizando javascript para esto, dejo el código que estoy utilizando por si veis algún fallo

importClass(“VByteArray”);

//Leemos la cadena
var cadena = theRoot.varToString(“CAD”);

var oTexto = new VByteArray();
oTexto.setText(cadena);

var oByteArray = new VByteArray();
oByteArray.toBase64(oTexto);

theRoot.setVar(“COD”,oByteArray.toLatin1String());

Hola desarrollo.

Ese código no puede funcionar.

Prueba éste que puse hace pocos dias en el foro.

var oBA = new VByteArray()
var cXML = theRoot.varToString(“CXML”)
oBA.setText(cXML)
var oB64 = oBA.toBase64()
theRoot.setVar(“CBASE64”, oB64.toLatin1String())

No es necesaerio el importClass()

Saludos
Paco Satué

Hola, si quiero hacer lo contrario de Base64 a texto seria asi?

// Obtenemos el string de la variable en Base64
var cBase64 = theRoot.varToString(“BASE64”);

// Define el string Base64
var oTexto = new VByteArray();
// Rellenamos un VByteArray con el string Base64
oTexto.setText(cBase64);

// Obtenemos el ByteArray original de Base64
var oByteArray = new VByteArray();
oByteArray.fromBase64(oTexto);

// Define el contenido de la variable de texto
//theRoot.setVar(“TXT”, oTexto.toLatin1String());
theRoot.setVar(“TXT”, oByteArray.toLatin1String);

Estoy intentando tambien adivinar porque no me funciona nada y el vclient se rompe algunas veces.

Agradezco muco una ayuda con esto. Por favor.

Hola alfonsocotes.

Primero nos tendrás que decir qué has codificado en la cadena de texto cBase64.
Es texto, imagen, archivo binario …?

Si oByteArray resulta en un array de contenido binario, la función toLatin1String devolverá contenido basura.

En cualquier caso le faltan los paréntesis a la función toLatin1String.

Saludos
Paco Satué

En la variable cBase64 asigno un texto codificado en Base64, pero efectivamente me di cuenta que hacian falta los parentesis al final de toLatin1String.

Para convertir o “traducir” de Base64 a Texto, me quedo funcionando de esta manera:

// Obtiene el string en Base64
var cBase64 = theRoot.varToString(“BASE64”);

// Define el objeto vByteArray
var oTexto = new VByteArray();
// Rellenamos un VByteArray con el string Base64
oTexto.setText(cBase64);

// Obtiene el texto traducido de Base64
var oByteArray = new VByteArray();
oByteArray.fromBase64(oTexto);

// Retorna el contenido de la variable de texto
theRoot.setVar(“TXT”, oByteArray.toLatin1String());

Muchas gracias por tu interés y por notar la confirmación de mi error.

También pude hacer el que convierte una cadena de texto a Base64, de la siguiente manera:

// Obtenemos el string de la variable TXT
var cTexto = theRoot.varToString(“TXT”);

// Rellenamos un VByteArray con el string TXT
var oByteArray = new VByteArray();
oByteArray.setText(cTexto);

// Convertimos el TXT a Base64
var oBase64 = oByteArray.toBase64();

// Retorna el contenido de la variable Base64
theRoot.setVar(“BASE64”, oBase64.toLatin1String());

Gracias a ti Paco Satué

1 me gusta

Hola paco como seria para codificar en vez de un texto una imagen?

Hola ereitmann.

Tenéis ejemplos de codificación Base 64 en la aplicación MiAPI, en la rama de VByteArray.

Saludos
Paco Satué

1 me gusta

Buenos días!

Tengo un problema, la cadena en base64 que tengo que descodificar está en UTF-8, por lo que al descodificarla usando el javascript de @pacosatu me salen mal las “ñ” y resto de caracteres “especiales”.

¿Hay alguna manera de que la última línea exporte el valor de la variable sin transformarla en Latin1? Aquí os pongo el javascript que estoy usando:

var textoBase64 = theRoot.varToString(“TXT_BASE64”);
var textoOriginal = new VByteArray();
textoOriginal.setText(textoBase64);
var textoOriginal2 = new VByteArray();
textoOriginal2.fromBase64(textoOriginal);
theRoot.setVar(“TXT_ORIG”, textoOriginal2.toLatin1String());

He probado con “theRoot.setVar(“TXT_ORIG”, textoOriginal2.toUtf8String());” pero no funciona…

Muchas gracias de antemano,
Noé.-

Hola basesoft.

Efectívamente, las cadenas de texto codificadas en UTF-8 no funcionarán con el VByteArray del API.

Tendrás que recurrir a la cadena original en UTF-8 y pasarle la función encodeURIComponent.

Al final del proceso usas la función decodeURIComponent para obtener la cadena UTF-8 original.

Tienes un ejemplo de codificación de caracteres especiales en la aplicación MiAPI, rama VByteArray.

Saludos
Paco Satué

Buen aporte, estaba buscando esta conversión de texto a base64, ni en la documentación de doc.velneo lo tienen correcto.

Ahora @pacosatu desde la base64 y al volver a convertir de base64 a texto las letras mayúsculas se colocan como minúsculas, hay la menera de mantener correctamente la nomenclatura origen?

Gracias su ayuda

Hola lgonzalez.

Revisa tu código porque en la codificación base64 no hay conversión mayúsculas/minúsculas.

Saludos
Paco Satué