readstream read nodejs node javascript file-io node.js

javascript - nodejs - read file typescript



¿Por qué Node.js ''fs.readFile() devuelve un búfer en lugar de una cadena? (6)

Async:

fs.readFile(''test.txt'', ''utf8'', callback);

Sincronizar

var content = fs.readFileSync(''test.txt'', ''utf8'');

Estoy tratando de leer el contenido de test.txt (que está en la misma carpeta de la fuente de Javascript) y mostrarlo usando este código:

var fs = require("fs"); fs.readFile("test.txt", function (err, data) { if (err) throw err; console.log(data); });

El contenido del test.txt fue creado en nano :

Probando Node.js readFile ()

Y estoy recibiendo esto:

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$


De la documentación:

Si no se especifica ninguna codificación, se devuelve el búfer sin formato.

Lo que podría explicar el <Buffer ...> . Especifique una codificación válida, por ejemplo, utf-8 , como su segundo parámetro después del nombre de archivo. Como,

fs.readFile("test.txt", "utf8", function(err, data) {...});


Está devolviendo un objeto Buffer.

Si lo desea en una cadena, puede convertirlo con data.toString() :

var fs = require("fs"); fs.readFile("test.txt", function (err, data) { if (err) throw err; console.log(data.toString()); });


Esto ocupa un lugar destacado en Google, por lo que me gustaría agregar información contextual sobre la pregunta original (el énfasis es mío):

¿ Por qué Node.js ''fs.readFile () devuelve un búfer en lugar de una cadena?

Porque los archivos no son siempre 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 era leer un archivo de texto, todavía no tendría idea de qué codificación de caracteres se usa (es decir, cómo los bytes en el archivo se asignan a caracteres legibles por humanos), porque la propia codificación de caracteres no se almacena en el archivo. .

Hay formas de guess 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 quiere que su código se base en suposiciones sin su instrucción explícita.

Buffers al rescate!

Entonces, dado que no sabe y no puede conocer todos estos detalles, Node solo lee el byte del archivo por byte, sin asumir nada sobre su contenido.

Y eso es lo que el búfer devuelto es: un contenedor no votado para contenido binario en bruto. Cómo debe interpretarse este contenido depende de usted como desarrollador.


La variable de data contiene un objeto Buffer . Conviértalo en codificación ASCII usando la siguiente sintaxis:

data.toString(''ascii'', 0, data.length)

Asincrónicamente:

fs.readFile(''test.txt'', ''utf8'', function (error, data) { if (error) throw error; console.log(data.toString()); });


tratar

fs.readFile("test.txt", "utf8", function(err, data) {...});

Básicamente necesitas especificar la codificación.