为什么Node.js的fs.readFile()返回缓冲区而不是字符串?

JavaScript Node.js

伽罗Tom猪猪

2020-03-18

我正在尝试读取test.txt(位于Javascript源的同一文件夹中)的内容,并使用以下代码显示它:

var fs = require("fs");

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

的内容test.txt创建于nano

测试Node.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$ 

第2007篇《为什么Node.js的fs.readFile()返回缓冲区而不是字符串?》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

3个回答
Jim乐 2020.03.18

它返回一个Buffer对象。

如果要以字符串形式输入,可以使用以下命令进行转换data.toString()

var fs = require("fs");

fs.readFile("test.txt", function (err, data) {
    if (err) throw err;
    console.log(data.toString());
});
路易米亚 2020.03.18

文档:

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

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

fs.readFile("test.txt", "utf8", function(err, data) {...});
神奇阿良Jim 2020.03.18

尝试

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

基本上,您需要指定编码。

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android