readFileSync 不适用于我。将输入设置为字符串后,我尝试打印输入,但很奇怪

readFileSync won't work with me. I tried to print the input after setting it to string but was weird

我是 Node.js 的新手,我正在尝试独自学习。我有一个简单的任务来执行以下操作: - 读取文件(提供购买第一个命令行参数)。 -打印文件中的行数。 -我正在使用 readFileSync 方法。

代码是 运行 但输出很奇怪。我尝试打印每条语句,我认为问题出在数据读取上。谁能告诉我哪里错了?

    function numLines(){
      var fs = require('fs');
      var num = 0;
      var contents = fs.readFileSync(process.argv[0]);
      console.log(contents.toString());

      return num;
    }

忽略return声明,请只关注readFileSync。打印内容时,打印出来的文字全是奇怪的字符,好像读错了一样

如果没有 encodingreadFilereadFileSync 会给你一个原始缓冲区,你必须自己用正确的编码来解释(而不是仅仅调用 toString它)。来自文档:

If no encoding is specified, then the raw buffer is returned.

因此,要么在 readFileSync 调用中指定文件的编码,要么使用缓冲区方法使用给定的编码读取它。 Buffer docs讲的是Node支持的编码,比如utf8.

例如,如果你的文件是 UTF-8,你会使用:

function numLines(){
  var fs = require('fs');
  var num = 0;
  var contents = fs.readFileSync(process.argv[0], {encoding: 'utf8'});
  console.log(contents.toString());

  return num;
}

更多:The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

  var contents = fs.readFileSync(process.argv[0]);

process.argv[0] 实际上不是传递给脚本的第一个参数。这是命令node。第二项是您的脚本的文件名,它被传递给 node,假设您将其称为 node myscript.js somefile.txt。您需要获得 third 项目:process.argv[2]

https://nodejs.org/api/process.html#process_process_argv