Node.js writeStream write将未知字符预先写入标记文件

Node.js writeStream write将未知字符预先写入标记文件,node.js,character-encoding,markdown,createwritestream,Node.js,Character Encoding,Markdown,Createwritestream,我正在尝试通过web界面编辑降价文件。我已经可以在编辑器中成功读取和解析文件 现在,我正试图在用户键入时更新原始文件。 我正在使用带有r+标志的createWriteStream。用户输入已成功写入目标文件,但一些奇怪的字符仍在文件前面 我认为这是一些编码问题,但不知道该怎么做 这是我的密码: let writer = null; const setNewWriteStream = path => { if (writer) { writer.e

我正在尝试通过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);
      });
    };
因此,基本上,每次用户打开一个文件时,我都会重置writer并创建一个新的writer。当用户键入时,将调用writeNewData函数,将整个文档的文本作为参数传递。所以我删掉了内容,写了一个新的

这是打开时我的文件的内容:

# Overview
这是在更新之后:

我尝试过显式地将编码设置为“utf8”,但没有成功。我在文档中搜索了选项和它们的描述,但我必须说我在这个过程中迷失了方向

我还尝试了条带bom库,认为它可能是bom字符(仍然不确定),但没有成功

writer.write(stripBom(data)) // same result
编辑:

看起来只有在使用truncate方法时才会出现此问题。我尝试使用truncateSync,但同样的问题也发生了。如果我根本不使用truncate,那么除了文件的全部内容不断附加到上一个内容之外,没有什么问题。结果是这样的:

# Overview# Overview t# Overview te# Overview tes# Overview test

你知道为什么fs.truncate()会在文件中添加空字符吗?很遗憾,我找不到任何东西…谢谢你的回复!这种行为真的很奇怪。。。我想知道这是否是因为我们有一个写流,同时在文件路径上调用truncate?