web-dev-qa-db-fra.com

Base64 encoder un objet javascript

J'ai de gros objets Javascript que je voudrais encoder en base 64 pour AWS Kinesis` Il s'avère que:

let objStr = new Buffer(JSON.stringify(obj), 'ascii');
new Buffer(objStr, 'base64').toString('ascii') !== objStr

J'essaie de garder cela aussi simple que possible.

Comment puis-je coder JSON en base 64 et le décoder en toute sécurité à sa valeur d'origine?

20
johni

Vous avez mal compris le constructeur Buffer(str, [encoding]), le encoding indique au constructeur quel encodage a été utilisé pour créer str, ou quel encodage le constructeur doit utiliser pour décoder str dans un tableau d'octets.

Fondamentalement, la classe Buffer représente des flux d'octets. C'est uniquement lorsque vous la convertissez depuis/vers des chaînes que l'encodage est mis en contexte.

Vous devriez plutôt utiliser buffer.toString("base64") pour obtenir le contenu de la mémoire tampon codé en base 64.

let objJsonStr = JSON.stringify(obj);
let objJsonB64 = Buffer.from(objJsonStr).toString("base64");
26
xiaofeng.li

De la chaîne à la base 64

var obj = {a: 'a', b: 'b'};
var encoded = btoa(JSON.stringify(obj))

Pour décoder à la réalité

var actual = JSON.parse(atob(encoded))

Pour référence, regardez ici.

https://developer.mozilla.org/en/docs/Web/API/WindowBase64/Base64_encoding_and_decoding

58
Zohaib Ijaz