readFileSync不会与我一起工作。 我试图打印input后设置为string,但很奇怪

我新的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。 在打印内容时,打印的文字充满了怪异的字符,好像阅读出错了

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

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

请参阅https://nodejs.org/api/process.html#process_process_argv

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

如果没有指定编码,则返回原始缓冲区。

因此,要么在readFileSync调用中指定文件的编码,要么使用缓冲区方法使用给定的编码来读取它。 Buffer文档讨论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; } 

更多: 绝对最低限度每个软件开发人员绝对,积极必须知道Unicode和字符集(没有借口!)