为什么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()); });
data
variables包含一个Buffer
对象。 使用以下语法将其转换为ASCII编码:
data.toString('ascii', 0, data.length)
asynchronous:
fs.readFile('test.txt', 'utf8', callback);
同步:
var content = fs.readFileSync('test.txt', 'utf8');