我正在尝试阅读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$
答案 0 :(得分:407)
如果未指定编码,则返回原始缓冲区。
这可以解释<Buffer ...>
。指定有效编码,例如utf-8
,作为文件名后的第二个参数。如,
fs.readFile("test.txt", "utf8", function(err, data) {...});
答案 1 :(得分:150)
尝试
fs.readFile("test.txt", "utf8", function(err, data) {...});
基本上你需要指定编码。
答案 2 :(得分:32)
它返回一个Buffer对象。
如果您想在字符串中使用它,可以使用data.toString()
转换它:
var fs = require("fs");
fs.readFile("test.txt", function (err, data) {
if (err) throw err;
console.log(data.toString());
});
答案 3 :(得分:31)
异步:
fs.readFile('test.txt', 'utf8', callback);
同步:
var content = fs.readFileSync('test.txt', 'utf8');
答案 4 :(得分:22)
这在Google上很高,所以我想添加一些关于原始问题的背景信息(强调我的):
为什么 Node.js的fs.readFile()是否返回缓冲区而不是字符串?
即使你作为程序员知道它:Node也不知道你想要读取的文件中有什么。它可能是一个文本文件,但它也可能是一个ZIP存档或JPG图像 - 节点不知道。
即使Node 知道它是读取文本文件,它仍然不知道使用了哪个character encoding(即文件中的字节如何映射到人类可读的字符),因为字符编码本身没有存储在文件中。
有guess方式cheerio文本文件的字符编码或多或少有信心(这是文本编辑在打开文件时所做的事情),但是你通常不希望你的代码依赖猜测而没有你的明确指示。
因此,因为它不能并且不能知道所有这些细节,Node只是为字节读取文件字节,而不假设其内容。
这就是返回的缓冲区:原始二进制内容的未暂定容器。如何解释这些内容取决于您作为开发人员。
答案 5 :(得分:12)
data
变量包含Buffer
个对象。使用以下语法将其转换为ASCII编码:
data.toString('ascii', 0, data.length)
异步:
fs.readFile('test.txt', 'utf8', function (error, data) {
if (error) throw error;
console.log(data.toString());
});
答案 6 :(得分:0)
您缺少第二个参数的编码方案,通常是 "utf-8"
。如果没有提到编码方案,则返回普通缓冲区。