Javascript Node.js读取文件内容到字符串的结果为“?”

Javascript Node.js读取文件内容到字符串的结果为“?”,javascript,node.js,asynchronous,filereader,Javascript,Node.js,Asynchronous,Filereader,User2.txt仅包含一个字符1 所以当我运行它时,输出是:?1。为什么会出现这些问号?我本来想要一个号码,但我刚收到留言,我想不是号码。所以我把缓冲区转换成字符串,得到了这个。有什么帮助吗?这个问题似乎有帮助 基本上,您只需要执行以下操作: var fs = require('fs'); var myNumber = undefined; function addOne(callback) { fs.readFile('./User2.txt', 'utf8', function do

User2.txt仅包含一个字符1

所以当我运行它时,输出是:?1。为什么会出现这些问号?我本来想要一个号码,但我刚收到留言,我想不是号码。所以我把缓冲区转换成字符串,得到了这个。有什么帮助吗?

这个问题似乎有帮助

基本上,您只需要执行以下操作:

var fs = require('fs');
var myNumber = undefined;

function addOne(callback) {
  fs.readFile('./User2.txt', 'utf8', function doneReading(err, fileContents) {
    myNumber = fileContents.toString();
    callback();
  });
}

function logMyNumber() {
  console.log(myNumber);
}

addOne(logMyNumber);
在这里,您可以从该讨论中获得许多其他解决方法:

替换:

fileContents=fileContents.replace/^\uFEFF/

使用fs.readFileSync而不是fs.readFile

使用软件包


我已经通过将文本文件保存在写字板而不是记事本中修复了它。将其保存为文本文档-ms dos格式。

大多数IDE都支持RegExp搜索,因此在代码库中搜索该错误字符非常容易:

fs.readFile(filePath, 'utf8', function (err, fileContents) {
    // Remove BOM character if there is one at the start of the file.
    if(fileContents.charCodeAt(0) == 65279) fileContents = fileContents.substr(1);
}

只需将其替换为空字符串即可

您将看到一个BOM表。请解释BOM表,我是一个正在学习教程的新手。但他们的例子并没有达到预期效果。
\uFEFF