我正在尝试读取test.txt
(与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()
我得到了这个:
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$
发布于 2011-06-23 23:53:29
如果未指定编码,则返回原始缓冲区。
这也许能解释<Buffer ...>
的原因。指定有效的编码,例如utf-8
,作为文件名后的第二个参数。比如,
fs.readFile("test.txt", "utf8", function(err, data) {...});
发布于 2011-06-23 23:54:54
尝试:
fs.readFile("test.txt", "utf8", function(err, data) {...});
基本上,您需要指定编码。
发布于 2018-04-11 16:18:52
这在Google上很常见,所以我想添加一些关于原始问题的上下文信息(重点是我的):
为什么Node.js的fs.readFile()返回缓冲区而不是字符串?
因为文件并不总是文本的
即使您作为程序员知道这一点: Node也不知道您试图读取的文件中有什么。它可以是文本文件,但也可以是ZIP存档或JPG图像- Node不知道。
因为读取文本文件很棘手
即使Node知道它要读取文本文件,它仍然不知道使用了哪个character encoding (即文件中的字节如何映射到人类可读的字符),因为字符编码本身并不存储在文件中。
有一些方法可以或多或少地对文本文件的字符编码进行guess (这就是文本编辑器在打开文件时所做的事情),但是您通常不希望您的代码在没有明确说明的情况下依赖于猜测。
缓冲器来救援了!
因此,因为Node不知道也不可能知道所有这些细节,所以Node只会逐个字节地读取文件,而不会对其内容做出任何假设。
这就是返回的buffer :一个存放文件中原始字节的非固定容器。如何解释这些字节取决于您作为开发人员。
https://stackoverflow.com/questions/6456864
复制相似问题