Base64 编码一个 javascript 对象

Posted

技术标签:

【中文标题】Base64 编码一个 javascript 对象【英文标题】:Base64 encode a javascript object 【发布时间】:2016-11-03 04:53:48 【问题描述】:

我有大型 javascript 对象,我想将其编码为 base-64 以用于 AWS Kinesis` 原来:

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

我试图让这件事尽可能简单。

如何对 JSON 进行 base-64 编码并将其安全地解码回原始值?

【问题讨论】:

你为什么希望他们平等? 好吧,我正在尝试处理 base-64 JSON.parse(JSON.stringify(obj)) 对对象所做的事情。我该怎么做? url 编码也可以吗?生成的字符串可能比使用 base 64 编码的字符串小。 【参考方案1】:

从字符串到 Base-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

【讨论】:

你试过用非 ASCII 字符吗? atob 和 btoa 都坏了。 这不适用于 JSON 中未转义的字符 @Bender 你能举个例子吗? @Kugel 还有其他可用的解决方案吗?【参考方案2】:

您误解了Buffer(str, [encoding]) 构造函数,encoding 告诉构造函数使用什么编码来创建str,或者构造函数应该使用什么编码将str 解码为字节数组。

基本上Buffer 类表示字节流,只有当您将其从/转换为字符串时,编码才会进入上下文。

您应该改用 buffer.toString("base64") 来获取缓冲区内容的 base-64 编码。

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

【讨论】:

感谢您的解释。关于您的示例 - 它不适用于大型 JSON。我刚刚检查过,解码只返回原始 JSON 的一部分。 你的 JSON 有多大?我尝试了一些大的,它工作正常。 是的,你是对的。我可能只选择了编码字符串的一部分。 new Buffer() 现已弃用,您应该改用Buffer.from(),请参阅the doc【参考方案3】:

在将对象转换为 base64 时,我遇到了超出拉丁范围的问题和字符无效错误。

我通过下面的行使它在我的项目中工作。

包括base64utf8 节点包并像这样访问它们:

var bytes = base64.encode(utf8.encode(JSON.stringify(getOverviewComments())));

【讨论】:

以上是关于Base64 编码一个 javascript 对象的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 之 FileReader简介以及原生uniappvue如何将文件转成base64编码字符串示例

JavaScript 之 FileReader简介以及原生uniappvue如何将文件转成base64编码字符串示例

BigQuery 用户定义函数中的 Base64 编码

jsp页面上怎么用javascript获取base64编码的图片的大小

JSON 编码/解码 JavaScript 中的 base64 编码/解码

如何使用 javascript 获取 base64 编码图像的地址