Base64 кодирует объект javascript
У меня есть большие объекты Javascript, которые я бы хотел кодировать в base-64 для AWS Kinesis. Оказывается, что:
let objStr = new Buffer(JSON.stringify(obj), 'ascii');
new Buffer(objStr, 'base64').toString('ascii') !== objStr
Я стараюсь держать это как можно проще.
Как я могу base-64 кодировать JSON и безопасно декодировать его обратно до его первоначального значения?
Ответы
Ответ 1
Вы неправильно поняли конструктор Buffer(str, [encoding])
, encoding
сообщает конструктору, какая кодировка использовалась для создания str
, или какую кодировку должен использовать конструктор для декодирования str
в массив байтов.
В основном класс Buffer
представляет потоки байтов, это только при преобразовании его из/в строки, которые кодировка входит в контекст.
Вместо этого вы должны использовать buffer.toString("base64")
чтобы получить кодировку base-64 содержимого буфера.
let objJsonStr = JSON.stringify(obj);
let objJsonB64 = Buffer.from(objJsonStr).toString("base64");
Ответ 2
От струны до базы-64
var obj = {a: 'a', b: 'b'};
var encoded = btoa(JSON.stringify(obj))
Декодировать обратно к фактическому
var actual = JSON.parse(atob(encoded))
Для справки смотрите здесь.
https://developer.mozilla.org/en/docs/Web/API/WindowBase64/Base64_encoding_and_decoding