gpt4 book ai didi

javascript - 为什么不能在 node.js 中使用 ascii 模式在文件中写入空字节?

转载 作者:数据小太阳 更新时间:2023-10-29 06:11:45 26 4
gpt4 key购买 nike

这是我的代码

var fs = require('fs');
var fp = fs.openSync('binary.txt', "w");

var byte = '\0';
fs.writeSync(fp, byte, null, 'ascii');

当我打开 binary.txt 文件时执行它后,它包含 0x20 而不是预期的空字节。

现在当我使用

fs.writeSync(fp, byte, null, 'utf-8');

我在文件中得到了想要的空字节。

最佳答案

这不是因为具体的文件,而是 Node 将 ASCII 转换为字节以写入的方式。您将在其中看到相同的行为:

new Buffer('\0', 'ascii')[0]
// 32

如果你想写一个NULL字节到一个文件,不要使用字符串,只写你想要的字节。

fs.writeSync(fp, new Buffer([0x00]));

一般在做文件IO时,我会建议只在内容明确为文本内容时才使用字符串。如果您正在做任何超出此范围的事情,请坚持使用 Buffer

细节

实际上是 V8,而不是 Node 执行这种转换。 Node 公开了 ascii 编码作为一种更快的转换为二进制的方法。为此,它使用 V8 的 String::WriteOneByte 方法,除非明确指示不要这样做,否则此函数会自动将 '\0' 转换为 ' '.

关于javascript - 为什么不能在 node.js 中使用 ascii 模式在文件中写入空字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21814811/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com