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

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

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$

#1楼

data变量包含一个Buffer对象。 使用如下语法将其转换为ASCII编码: 测试

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

异步地: ui

fs.readFile('test.txt', 'utf8', function (error, data) {
    if (error) throw error;
    console.log(data.toString());
});

#2楼

异步: 编码

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

同步: spa

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

#3楼

这在Google上很重要,所以我想添加一些有关原始问题的上下文信息(重点是个人): code

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

由于文件并不老是文本

即便是程序员,也知道它:Node不知道您要读取的文件中的内容。 它能够是文本文件,但也能够是ZIP存档或JPG图像-Node不知道。

由于读取文本文件很棘手

即便Node 知道要读取文本文件,也仍然不知道使用哪一种字符编码 (即文件中的字节如何映射为人类可读的字符),由于字符编码自己未存储在文件中。

有多种方法能够或多或少地猜想文本文件的字符编码(这是文本编辑器在打开文件时所作的事情),可是您一般不但愿您的代码在没有明确说明的状况下依靠猜想。

缓冲救援!

所以,由于它不知道全部这些细节,因此不知道全部这些详细信息,所以Node只是逐字节读取文件,而不假定其内容。

这就是返回的缓冲区的内容:原始数据二进制内容的未修饰容器。 做为开发人员,应如何解释此内容。


#4楼

文档:

若是未指定编码,则返回原始缓冲区。

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

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

#5楼

尝试

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

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

相关文章
相关标签/搜索