Node.js writeStream write将未知字符预先写入标记文件
我正在尝试通过web界面编辑降价文件。我已经可以在编辑器中成功读取和解析文件 现在,我正试图在用户键入时更新原始文件。 我正在使用带有r+标志的createWriteStream。用户输入已成功写入目标文件,但一些奇怪的字符仍在文件前面 我认为这是一些编码问题,但不知道该怎么做 这是我的密码: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
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?