爲何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) {...});

基本上,您須要指定編碼。

相關文章
相關標籤/搜索