483 votes

Pourquoi le fs.readFile() de Node.js renvoie-t-il un tampon au lieu d'une chaîne ?

J'essaie de lire le contenu de test.txt (qui se trouve dans le même dossier de la source Javascript) et de l'afficher à l'aide de ce code :

 var fs = require("fs");

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

Le contenu du test.txt été créé le nano :

Test de Node.js readFile()

Et j'obtiens ceci :

 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$ 

702voto

davin Points 19682

A partir de la doc :

Si aucun codage n'est spécifié, le tampon brut est renvoyé.

Ce qui pourrait expliquer le <Buffer ...> . Spécifiez un encodage valide, par exemple utf-8 , comme deuxième paramètre après le nom de fichier. Tel que,

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

190voto

hvgotcodes Points 55375

Essayer:

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

Fondamentalement, vous devez spécifier l'encodage.

58voto

Teakcc Points 2675

Async :

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

Synchroniser :

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

45voto

Andz Points 1212

Il renvoie un objet Buffer.

Si vous le voulez dans une chaîne, vous pouvez le convertir avec data.toString() :

 var fs = require("fs");

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X