【问题标题】:Node.js readFile contents to string results in "??"Node.js 将文件内容读取到字符串结果为“??”
【发布时间】:2014-12-30 00:14:21
【问题描述】:
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(我猜不是数字)。所以我将缓冲区转换为字符串,并得到了这个。有什么帮助吗?

【问题讨论】:

  • 您看到的是 BOM。
  • 请解释一下BOM,我是新手,正在学习教程。但他们的例子并没有按预期工作。

标签: javascript node.js asynchronous filereader


【解决方案1】:

you are not the first one 似乎有这个问题。

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

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 包。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      大多数 IDE 都支持 RegExp 搜索,因此很容易在代码库中搜索那个有问题的字符:

      \uFEFF
      

      用空字符串替换就行了

      【讨论】:

        猜你喜欢
        • 2021-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多