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