Почему Node.js 'fs.readFile() возвращает буфер вместо строки?
Я пытаюсь прочитать содержимое 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$
Ответы
Ответ 1
От документы:
Если кодировка не указана, возвращается исходный буфер.
Что может объяснить <Buffer ...>
. Укажите допустимую кодировку, например utf-8
, в качестве второго параметра после имени файла. Например,
fs.readFile("test.txt", "utf8", function(err, data) {...});
Ответ 2
попробуйте
fs.readFile("test.txt", "utf8", function(err, data) {...});
в основном вам нужно указать кодировку.
Ответ 3
Он возвращает объект Buffer.
Если вы хотите его в строке, вы можете преобразовать его с помощью data.toString()
:
var fs = require("fs");
fs.readFile("test.txt", function (err, data) {
if (err) throw err;
console.log(data.toString());
});
Ответ 4
Переменная data
содержит объект Buffer
. Преобразуйте его в кодировку ASCII, используя следующий синтаксис:
data.toString('ascii', 0, data.length)
Ответ 5
Асинхронный:
fs.readFile('test.txt', 'utf8', callback);
Синхронизация:
var content = fs.readFileSync('test.txt', 'utf8');