为什么不能用ascii模式在node.js文件中写一个空字节?
这是我的代码
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');
我在文件中得到想要的空字节。
这不是因为文件具体,而是方式节点转换成字节写入ASCII。 你会看到在这个相同的行为:
new Buffer('\0', 'ascii')[0] // 32
如果你想写一个NULL字节的文件,不要使用一个string,只需要写你想要的字节。
fs.writeSync(fp, new Buffer([0x00]));
一般在做文件IO时,我build议只在内容是明文内容时才使用string。 如果你在做什么以外的事情,坚持使用Buffer
。
细节
它实际上是V8,而不是执行这种转换的节点。 节点将ascii
编码公开为转换为二进制的更快方法。 为了达到这个目的,它使用V8的String::WriteOneByte
方法,除非有明确的指示,否则这个函数自动将'\0'
转换为' '
。