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?
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");
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