Esto aparece en Google, por lo que me gustaría agregar información contextual sobre la pregunta original (énfasis mío):
¿ Por qué el fs.readFile () de Node.js devuelve un búfer en lugar de una cadena?
Porque los archivos no siempre son texto
Incluso si usted como programador lo sabe: Node no tiene idea de qué hay en el archivo que está intentando leer. Podría ser un archivo de texto, pero también podría ser un archivo ZIP o una imagen JPG. Node no lo sabe.
Porque leer archivos de texto es complicado
Incluso si Node supiera que es para leer un archivo de texto, aún no tendría idea de qué codificación de caracteres se utiliza (es decir, cómo los bytes en el archivo se asignan a caracteres legibles por humanos), porque la codificación de caracteres en sí no se almacena en el archivo .
Hay formas de adivinar la codificación de caracteres de los archivos de texto con más o menos confianza (eso es lo que hacen los editores de texto al abrir un archivo), pero generalmente no desea que su código se base en conjeturas sin su instrucción explícita.
¡Amortiguadores al rescate!
Entonces, debido a que no conoce ni puede conocer todos estos detalles, Node solo lee el archivo byte por byte, sin asumir nada sobre su contenido.
Y eso es lo que es el búfer devuelto: un contenedor no opinado para contenido binario sin procesar. Cómo debe interpretarse este contenido depende de usted como desarrollador.