javascript - 对 Buffer 如何在 Node.js 中编码 Base64 感到困惑

标签 javascript node.js encoding utf-8

我在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”变成 ,然后 Buffer 存储这两个字节。

> Buffer("Man", "base64").toString()
'1©'

基于此,尝试 Buffer("TWFu","base64") ,看看您是否理解它为什么返回它所做的事情。

关于javascript - 对 Buffer 如何在 Node.js 中编码 Base64 感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33978304/

相关文章:

javascript - 使用验证器 jQuery 在 Click 事件上验证表单

cakephp - 如何获取以 UTF-8 编码的 cakePHP i18n .pot 文件?

java - Android - 写/读文件编码

node.js - 添加 Node.js 应用程序作为 Apache 别名?

mysql - 向mysql插入特殊字符

javascript - 从 71 种可能性中生成一个随机短语

javascript - 重复函数直到为真

javascript - 让多个按钮在 ReactJS 中调用一个函数

javascript - 如何在node js中的readline.on函数下使用await函数

node.js - 获取NodeJS中ssh-client的执行结果