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 时,我遇到了超出拉丁范围的问题和字符无效错误。
我通过下面的行使它在我的项目中工作。
包括base64
和utf8
节点包并像这样访问它们:
var bytes = base64.encode(utf8.encode(JSON.stringify(getOverviewComments())));
【讨论】:
以上是关于Base64 编码一个 javascript 对象的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript 之 FileReader简介以及原生uniappvue如何将文件转成base64编码字符串示例
JavaScript 之 FileReader简介以及原生uniappvue如何将文件转成base64编码字符串示例
jsp页面上怎么用javascript获取base64编码的图片的大小