Почему делает узел.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:
Узел Тестирования.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$
6 ответов:
Если кодировка не указана, то возвращается необработанный буфер.
что может объяснить
<Buffer ...>. Укажите допустимую кодировку, напримерutf-8, как ваш второй параметр после имени файла. Например,fs.readFile("test.txt", "utf8", function(err, data) {...});
попробовать
fs.readFile("test.txt", "utf8", function(err, data) {...});в основном вам нужно указать кодировку.
он возвращает объект буфера.
Если вы хотите, чтобы он был в строке, вы можете преобразовать его с помощью
data.toString():var fs = require("fs"); fs.readFile("test.txt", function (err, data) { if (err) throw err; console.log(data.toString()); });
асинхронные:
fs.readFile('test.txt', 'utf8', callback);синхронизации:
var content = fs.readFileSync('test.txt', 'utf8');
The
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()); });
Это происходит высоко в Google, поэтому я хотел бы добавить некоторую контекстуальную информацию об исходном вопросе (акцент мой):
почему делает узел.js ' fs.readFile () возвращает буфер вместо строки?
потому что файлы не всегда текст
даже если вы как известно программисту: Node понятия не имеет, что находится в файле, который вы пытаетесь прочитать. Это может быть текстовый файл, но он может так же ну будет ZIP архив или JPG изображение-узел не знает.
потому что чтение текстовых файлов сложно
даже если узел знал он должен был прочитать текстовый файл, он все еще не знал, какой кодировка используется (т. е. как байты в файле сопоставляются с удобочитаемыми символами), потому что сама кодировка символов не хранится в файле.
есть способы Угадай кодировка символов текстовых файлов с помощью более или менее уверенно (это то, что обычно делают редакторы), но вы обычно не хотите, чтобы ваш код полагался на догадки без вашего явного намерения.
буфера на помощь!
Итак, поскольку он не знает и не может знать все эти детали, узел просто читает файл байт за байтом, не предполагая ничего о его содержимом.
вот что такое возвращаемый буфер: неоткрытый контейнер для необработанного двоичного содержимого. Как это содержание должно быть интерпретировано до вас, как разработчика.
Comments