我在node.js中使用Buffer来解码base64。我看了一眼 Buffer 如何存储原始字节数据,但我对它的工作原理感到非常困惑。例如,如果我想使用 Buffer 对字符串“©”进行 UTF-8 编码,如下所示: Buffer("©", "utf-8").toJSON()
,我会得到预期的结果[194, 169]
字节数组。 Buffer("©", "ucs2").toJSON()
再次生成 [169, 0],即预期的字节表示形式。现在,我期望 Buffer("Man", "base64").toJSON()
为 [84, 87, 70, 117]
,它对应于 ascii字符串“TWFu”的字节,相当于“Man”的 Base64 编码。但是,我得到的是 [49, 169]
。这似乎与 Buffer 在前两种情况下的工作方式不一致。有谁知道为什么?任何可以阐明这一点的帮助都非常感激。
最佳答案
您传入的编码告诉 Buffer
对象您也给它的字节序列使用该编码。所以:Buffer("Man","utf8")
意思是“使用输入“Man”创建一个缓冲区,并将该输入解码为内部存储,就好像字节是 utf8 编码的一样”。没问题:确实如此,所以它会做正确的事情:
> Buffer("Man", "utf8").toString() // note: no dash. The API docs tell us it's just "utf8".
'Man'
现在,如果我们声称字符串“Man”是 ucs2 编码的,我们不会只得到“Man”,我们会得到:
> Buffer("Man", "ucs2").toString()
'M\u0000a\u0000n\u0000'
如果我们尝试 Buffer("Man", "base64")
我们告诉缓冲区字符串“Man”是base64编码的,因此它会在存储之前尝试对其进行解码,这意味着它将首先执行与atob(input)
等效的操作,将“Man”变成 1©
,然后 Buffer 存储这两个字节。
> Buffer("Man", "base64").toString()
'1©'
基于此,尝试 Buffer("TWFu","base64")
,看看您是否理解它为什么返回它所做的事情。
关于javascript - 对 Buffer 如何在 Node.js 中编码 Base64 感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33978304/