节点.js读取要字符串的文件内容会导致“??".

Node.js readFile contents to string results in "??"

本文关键字:quot 读取 js 字符串 文件 节点      更新时间:2023-09-26
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);

User2.txt 仅包含一个字符"1"。

所以当我运行它时,输出是:"??1'".为什么会出现这些问号?我最初想要一个数字,但我刚刚收到消息,NaN(我猜不是数字)。所以我将缓冲区转换为字符串,并得到了这个。有什么帮助吗?

看来你不是第一个遇到这个问题的人。

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

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);
}

在这里,您从该讨论中获得了许多其他解决方法:

  • 取代:

    fileContents = fileContents.replace(/^'uFEFF/, '');

  • 使用fs.readFileSync而不是fs.readFile

  • 使用bomstrip软件包。

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

大多数 IDE 都支持正则表达式搜索,因此在代码库中搜索有缺陷的字符非常容易:

'uFEFF

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