Jan*_*itz 5 javascript node.js
这是我的代码
var fs = require('fs');
var fp = fs.openSync('binary.txt', "w");
var byte = '\0';
fs.writeSync(fp, byte, null, 'ascii');
Run Code Online (Sandbox Code Playgroud)
在我打开binary.txt文件执行它之后,它包含0x20而不是预期的空字节.
现在我用的时候
fs.writeSync(fp, byte, null, 'utf-8');
Run Code Online (Sandbox Code Playgroud)
我在文件中得到了想要的空字节.
这不是因为文件具体,而是因为Node将ASCII转换为字节进行写入.你会在这里看到相同的行为:
new Buffer('\0', 'ascii')[0]
// 32
Run Code Online (Sandbox Code Playgroud)
如果要将NULL字节写入文件,请不要使用字符串,只需写入所需的字节即可.
fs.writeSync(fp, new Buffer([0x00]));
Run Code Online (Sandbox Code Playgroud)
通常在执行文件IO时,我建议仅在内容明确为文本内容时才使用字符串.如果你正在做任何事情,坚持使用Buffers.
它实际上是V8,而不是执行此转换的Node.Node将ascii编码公开为更快的转换为二进制的方法.为实现这一点,它使用V8的String::WriteOneByte方法,除非明确指示不这样做,否则此函数会自动转换'\0'为' '.