Це виходить високо в Google, тому я хотів би додати деяку контекстуальну інформацію про оригінальне запитання (моє наголос):
Чому fs.readFile () Node.js повертає буфер замість рядка?
Тому що файли не завжди є текстовими
Навіть якщо ти як програміст це знаєте: Node не має уявлення про те, що знаходиться у файлі, який ви намагаєтесь прочитати. Це може бути текстовий файл, але він також може бути архівом ZIP або зображенням JPG - Node не знає.
Тому що читання текстових файлів складне
Навіть якби Node знав, що це читати текстовий файл, він все одно не мав би поняття, яке кодування символів використовується (тобто як байти у файлі відображаються для людей, що читаються символами), тому що сам кодування символів не зберігається у файлі .
Є способи здогадатися кодування символів текстових файлів з більшою або меншою впевненістю (саме це роблять текстові редактори під час відкриття файлу), але зазвичай ви не хочете, щоб ваш код покладався на здогади без вашої чіткої інструкції.
Буфери на допомогу!
Отже, оскільки він не може і не може знати всі ці деталі, Node просто зчитує байт файлу за байтом, не припускаючи нічого про його вміст.
І ось що повертається буфер: ненапружений контейнер для бінарного вмісту. Як слід інтерпретувати цей вміст, залежить від вас як розробника.