我正在嘗試讀取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$
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()); });
異步: 編碼
fs.readFile('test.txt', 'utf8', callback);
同步: spa
var content = fs.readFileSync('test.txt', 'utf8');
這在Google上很重要,所以我想添加一些有關原始問題的上下文信息(重點是個人): code
爲何 Node.js的fs.readFile()返回緩衝區而不是字符串? 對象
即便您是程序員,也知道它:Node不知道您要讀取的文件中的內容。 它能夠是文本文件,但也能夠是ZIP存檔或JPG圖像-Node不知道。
即便Node 知道要讀取文本文件,也仍然不知道使用哪一種字符編碼 (即文件中的字節如何映射爲人類可讀的字符),由於字符編碼自己未存儲在文件中。
有多種方法能夠或多或少地猜想文本文件的字符編碼(這是文本編輯器在打開文件時所作的事情),可是您一般不但願您的代碼在沒有明確說明的狀況下依靠猜想。
所以,由於它不知道全部這些細節,因此不知道全部這些詳細信息,所以Node只是逐字節讀取文件,而不假定其內容。
這就是返回的緩衝區的內容:原始數據二進制內容的未修飾容器。 做爲開發人員,應如何解釋此內容。
從文檔:
若是未指定編碼,則返回原始緩衝區。
也許能夠解釋<Buffer ...>
。 指定一個有效的編碼,例如utf-8
,做爲文件名以後的第二個參數。 如,
fs.readFile("test.txt", "utf8", function(err, data) {...});
嘗試
fs.readFile("test.txt", "utf8", function(err, data) {...});
基本上,您須要指定編碼。