2011-06-23 11 views
164

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:¿Por qué Node.js 'fs.readFile() devuelve un búfer en lugar de cadena?

var fs = require("fs"); 

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

El contenido de la test.txt fue creado en nano:

Prueba Node.js readFile()

Y yo estoy haciendo 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$ 

Respuesta

227

De the docs:

Si no se especifica la codificación, se devuelve el tampón en bruto.

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 del archivo. Tales como,

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

tratar

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

básicamente, tiene que especificar la codificación.

+8

De acuerdo con la documentación Es ' "UTF-8"' 'No" UTF-8 "'. – Marc

21

Devuelve un objeto Buffer.

Si desea que en una cadena, se puede convertir con data.toString():

var fs = require("fs"); 

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

Un poco viejo, pero se debe saber que esta solución introduce una sobrecarga adicional ya que 'buffer.toString()' asume la codificación utf-8 de todos modos. Por lo tanto, esto sería equivalente a (aunque, más lento que) la respuesta de @hvgotcodes. – Brandon

+0

Gracias Andz, solución corta pero simple que solo es suficiente para mi trabajo ... –

8

La variable data contiene un objeto Buffer. Convertirla en la codificación ASCII utilizando la siguiente sintaxis:

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

asíncrono:

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

de sincronización:

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