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