为什么Node.js的fs.readFile()返回一个缓冲区而不是string?

我试图读取test.txt的内容(这是在Javascript源相同的文件夹),并使用此代码显示它:

 var fs = require("fs"); fs.readFile("test.txt", function (err, data) { if (err) throw err; console.log(data); }); 

test.txt的内容是在nano创build的:

testingNode.js readFile()

我得到这个:

 Nathan-Camposs-MacBook-Pro:node_test Nathan$ node main.js <Buffer 54 65 73 74 69 6e 67 20 4e 6f 64 65 2e 6a 73 20 72 65 61 64 46 69 6c 65 28 29> Nathan-Camposs-MacBook-Pro:node_test Nathan$ 

从文档:

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

这可能解释<Buffer ...> 。 指定一个有效的编码,例如utf-8 ,作为文件名后的第二个参数。 如,

 fs.readFile("test.txt", "utf8", function(err, data) {...}); 

尝试

 fs.readFile("test.txt", "utf8", function(err, data) {...}); 

基本上你需要指定编码。

它正在返回一个Buffer对象。

如果你想要一个string,你可以用data.toString()来转换它:

 var fs = require("fs"); fs.readFile("test.txt", function (err, data) { if (err) throw err; console.log(data.toString()); }); 

datavariables包含一个Buffer对象。 使用以下语法将其转换为ASCII编码:

 data.toString('ascii', 0, data.length) 

asynchronous:

 fs.readFile('test.txt', 'utf8', callback); 

同步:

 var content = fs.readFileSync('test.txt', 'utf8');