NodeJS:如何将base64编码的字符串解码回二进制?
在Node.js v6.0.0中,使用构造函数方法已经被弃用,应该使用以下方法从base64编码的字符串构建一个新的buffer:
var b64string = /* whatever */; var buf = Buffer.from(b64string, 'base64'); // Ta-da
对于Node.js v5.11.1及以下版本,可以使用以下方法构建一个新的Buffer,并将'base64'作为第二个参数传入:
var b64string = /* whatever */; var buf = new Buffer(b64string, 'base64'); // Ta-da
如果想要更加规范,可以检查from方法是否存在:
if (typeof Buffer.from === "function") { // Node 5.10+ buf = Buffer.from(b64string, 'base64'); // Ta-da } else { // older Node versions, now deprecated buf = new Buffer(b64string, 'base64'); // Ta-da }
感谢!不幸的是,他们的文档对这个方法并不清楚...(nodejs.org/docs/v0.4.8/api/buffers.html#new_Buffer)
不是那么糟糕,第三个构造函数就在那里。
那么我们如何知道它返回的是无效的?文档在哪里?
对于那些搜索反向方法的人 - ( new Buffer( str ) ).toString( "base64" )。
这个方法现在已经被弃用了,正确的方式现在是:var buf = Buffer.from(b64string, 'base64');,如此处所示:nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings
感谢更新的信息。你介意对这个答案提出修改建议吗?
提到的那一部分应该是答案的一部分!
顺便说一下,这段代码在旧的Node版本上似乎不起作用。在node 4.3.6上,Buffer.from仍然是一个函数,但是会抛出'TypeError: base64 is not a function'错误。
对我来说,它也引发了这个不清楚的错误,必须升级node才能正常工作。
如果toString('ascii')对你不起作用,可以尝试这个方法:Buffer.from(string, 'base64').toString('utf-8')
使用base64解码字符串到字符串的方法:let text = Buffer.from(imgurl, "base64").toString("utf-8");
你弄错了。应该是:const buf = Buffer.from('abc', 'utf-8').toString('base64');
只是想说在Node中使用Buffer的方式似乎已经被弃用了。更好的方法是:const binary = Buffer.from(base64String, 'base64');
对于反向方法,你可以通过调用atob()来解码它们。const a = new Buffer(str).toString('base64'); const decodedData = atob(a)