Nat*_*pos 323 javascript file-io node.js
我正在尝试阅读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$ 
dav*_*vin 472
来自文档:
如果未指定编码,则返回原始缓冲区.
这可能解释了<Buffer ...>.例如utf-8,指定有效编码作为文件名后的第二个参数.如,
fs.readFile("test.txt", "utf8", function(err, data) {...});
hvg*_*des 156
尝试
fs.readFile("test.txt", "utf8", function(err, data) {...});
基本上你需要指定编码.
Blu*_*ari 40
异步:
fs.readFile('test.txt', 'utf8', callback);
同步:
var content = fs.readFileSync('test.txt', 'utf8');
Loi*_*ilo 37
这在Google上很高,所以我想添加一些关于原始问题的背景信息(强调我的):
为什么 Node.js的fs.readFile()返回缓冲区而不是字符串?
即使你作为程序员知道它:Node也不知道你想要读取的文件中有什么.它可能是一个文本文件,但它也可能是一个ZIP存档或JPG图像 - 节点不知道.
即使Node 知道要读取文本文件,它仍然不知道使用了哪种字符编码(即文件中的字节如何映射到人类可读的字符),因为字符编码本身不存储在文件中.
有一些方法可以或多或少地猜测文本文件的字符编码(这是文本编辑器在打开文件时所做的事情),但是你通常不希望你的代码在没有明确指令的情况下依赖猜测.
因此,因为它不能并且不能知道所有这些细节,Node只是为字节读取文件字节,而不假设其内容.
这就是返回的缓冲区:原始二进制内容的未暂定容器.如何解释此内容取决于您作为开发人员.
And*_*ndz 35
它返回一个Buffer对象.
如果你想在一个字符串中,你可以转换它data.toString():
var fs = require("fs");
fs.readFile("test.txt", function (err, data) {
    if (err) throw err;
    console.log(data.toString());
});
ayu*_*sha 14
该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());
});
| 归档时间: | 
 | 
| 查看次数: | 218423 次 | 
| 最近记录: |