Это высоко ценится в Google, поэтому я хотел бы добавить некоторую контекстную информацию об исходном вопросе (выделение мое):
Почему Node.js 'fs.readFile () возвращает буфер вместо строки?
Потому что файлы не всегда текстовые
Даже если вы, как программист, знаете это: Node не знает, что находится в файле, который вы пытаетесь прочитать. Это может быть текстовый файл, но это также может быть ZIP-архив или изображение в формате JPG - Node не знает.
Потому что читать текстовые файлы сложно
Даже если бы Node знал, что нужно читать текстовый файл, он все равно не знал бы, кодировка символов используется (т. Е. Как байты в файле отображаются на читаемые человеком символы), поскольку сама кодировка символов не сохраняется в файле. ,
Есть способы угадать кодировку символов текстовых файлов с большей или меньшей достоверностью (это то, что текстовые редакторы делают при открытии файла), но вы обычно не хотите, чтобы ваш код полагался на догадки без вашего явного указания.
Буферы на помощь!
Итак, поскольку он не знает и не может знать все эти детали, Node просто читает байт файла за байтом, не предполагая ничего о его содержимом.
И это то, что является возвращаемым буфером: нерафинированный контейнер для необработанного двоичного содержимого. Как этот контент следует интерпретировать, решать вам как разработчику.