我正在尝试通过 Web 界面编辑降价文件。我已经可以在我的编辑器中成功读取和解析文件。
现在我正在尝试在用户输入时更新原始文件。我正在使用带有 r+ 标志的 createWriteStream。用户输入已成功写入目标文件,但文件中不断添加一些奇怪的字符。
我认为这是一些编码问题,但不知道该怎么做。
这是我的代码:
let writer = null;
const setNewWriteStream = path => {
if (writer) {
writer.end();
writer = null;
}
writer = fs.createWriteStream(path, { flags: 'r+' });
};
const writeNewData = data => {
fs.truncate(writer.path, 0, err => {
if (err) {
console.log(err);
return;
}
writer.write(data);
});
};
所以基本上,每次用户打开一个文件时,我都会重置编写器并创建一个新的。当用户键入时,将调用 writeNewData 函数,将整个文档的文本作为参数传递。所以我截断了内容并写了新的。
这是我打开文件时的内容:
# Overview
我尝试将编码显式设置为“utf8”,但没有成功。我在文档中搜索了选项及其描述,但我必须说我在这个过程中迷路了。
我还尝试了 strip-bom 库,认为它可能是 BOM 字符(仍然不确定)但没有成功。
writer.write(stripBom(data)) // same result
编辑:
看起来这个问题只在使用 truncate 方法时发生。我尝试使用 truncateSync 但发生了同样的问题。如果我根本不使用截断,除了文件的全部内容不断地附加到前一个内容之外,没有问题。导致这样的事情:
# Overview# Overview t# Overview te# Overview tes# Overview test