首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么Node.js的fs.readFile()返回缓冲区而不是字符串?

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

Stack Overflow用户
提问于 2011-06-23 23:44:29
回答 8查看 331.5K关注 0票数 462

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

代码语言:javascript
复制
var fs = require("fs");

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

nano上创建了test.txt的内容

Testing Node.js readFile()

我得到了这个:

代码语言:javascript
复制
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$ 
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-06-23 23:53:29

来自the docs:

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

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

代码语言:javascript
复制
fs.readFile("test.txt", "utf8", function(err, data) {...});
票数 677
EN

Stack Overflow用户

发布于 2011-06-23 23:54:54

尝试:

代码语言:javascript
复制
    fs.readFile("test.txt", "utf8", function(err, data) {...});

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

票数 185
EN

Stack Overflow用户

发布于 2018-04-11 16:18:52

这在Google上很常见,所以我想添加一些关于原始问题的上下文信息(重点是我的):

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

因为文件并不总是文本的

即使您作为程序员知道这一点: Node也不知道您试图读取的文件中有什么。它可以是文本文件,但也可以是ZIP存档或JPG图像- Node不知道。

因为读取文本文件很棘手

即使Node知道它要读取文本文件,它仍然不知道使用了哪个character encoding (即文件中的字节如何映射到人类可读的字符),因为字符编码本身并不存储在文件中。

有一些方法可以或多或少地对文本文件的字符编码进行guess (这就是文本编辑器在打开文件时所做的事情),但是您通常不希望您的代码在没有明确说明的情况下依赖于猜测。

缓冲器来救援了!

因此,因为Node不知道也不可能知道所有这些细节,所以Node只会逐个字节地读取文件,而不会对其内容做出任何假设。

这就是返回的buffer :一个存放文件中原始字节的非固定容器。如何解释这些字节取决于您作为开发人员。

票数 114
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6456864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档