将字符串转换为缓冲区Node

138

我正在使用一个库,调用函数会返回缓冲区的toString。

具体代码如下:

return Buffer.concat(stdOut).toString('utf-8');

但我不想要它的字符串版本。

我只想要缓冲区。

那么如何将字符串转换回缓冲区。

类似于if语句。

var bufStr = Buffer.concat(stdOut).toString('utf-8');
//convert bufStr back to only Buffer.concat(stdOut).

如何做到这一点?

我尝试过做

var buf = Buffer.from(bufStr, 'utf-8');
但是它会抛出“utf-8不是函数”的错误。当我执行

时。
var buf = Buffer.from(bufStr);

它抛出了TypeError:this不是一个类型数组。

谢谢

4个回答

226

您可以做:

var buf = Buffer.from(bufStr, 'utf8');

但这有点傻,因此另一个建议是只复制被调用函数中最少量的代码以允许您访问原始缓冲区。这可能很容易或相当困难,具体取决于该库的细节。


1
我尝试执行 Buffer.from(bufStr, 'utf-8'); 但它提示 utf-8 不是一个函数。如果我省略第二个参数 utf-8,那么它会抛出 TypeError: this is not a typed array。 - Aniket
8
很可能你的Node版本过旧。在升级之前,尝试使用Buffer(bufStr)即可。 - John Zwinck
1
实际上应该是'utf8'而不是'utf-8'。已编辑答案。 - Elad Nava
iconv-lite 更好,因为它使用客户端 JS 世界中的标准字符集名称(如 utf-8),而不是 NodeJS 的重新定义(如 utf8)。 - user1742529
5
Buffer.from(str)足够了,因为'utf8'是默认值。https://nodejs.org/api/buffer.html#buffer_class_method_buffer_from_string_encoding - bobmoff
"utf8" 是默认值,因此可以跳过而不产生任何影响。但为了可读性,我仍然会保留它,因为并非每个人都知道默认值。 - Lukas Liesis

19

您可以使用 Buffer.from() 将字符串转换为缓冲区。关于此的更多信息可以在这里找到。

var buf = Buffer.from('some string', 'encoding');

例如

var buf = Buffer.from(bStr, 'utf-8');

14

注意: 将 John Zwinck 的评论重新发布为答案。

一个问题可能是您正在使用旧版本的 Node(目前,我无法升级,代码库被限制在 v4.3.1)。这里的简单解决方案是使用已弃用的方式:

new Buffer(bufferStr)

注意 #2: 这是针对使用较旧版本的人,Buffer.from 无法运行。


4
这对我来说有效,您可以像这样更改您的代码。
var responseData=x.toString();

to

var responseData=x.toString("binary");

最后
response.write(new Buffer(toTransmit, "binary"));

1
太棒了,这正是我在寻找的! - Sahil Rajput
1
toTransmit来自哪里?这似乎是你的回答中没有上下文的随机出现。 - Routhinator

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接