Dies kommt bei Google sehr gut an, daher möchte ich einige kontextbezogene Informationen zur ursprünglichen Frage hinzufügen (Hervorhebung von mir):
Warum gibt fs.readFile () von Node.js einen Puffer anstelle eines Strings zurück?
Weil Dateien nicht immer Text sind
Auch wenn Sie als Programmierer es wissen: Node hat keine Ahnung, was in der Datei enthalten ist, die Sie lesen möchten. Es könnte eine Textdatei sein, aber es könnte genauso gut ein ZIP-Archiv oder ein JPG-Bild sein - Node weiß es nicht.
Weil das Lesen von Textdateien schwierig ist
Selbst wenn Node wüsste, dass es eine Textdatei lesen würde, hätte er immer noch keine Ahnung, welche Zeichen codiert werden verwendet wird (dh wie die Bytes in der Datei lesbaren Zeichen zugeordnet werden), da die Zeichenkodierung selbst nicht in der Datei gespeichert ist .
Es gibt Möglichkeiten zu erraten die Zeichenkodierung von Textdateien mehr oder weniger sicher (das tun Texteditoren beim Öffnen einer Datei), aber Sie möchten normalerweise nicht, dass sich Ihr Code ohne Ihre ausdrückliche Anweisung auf Vermutungen stützt.
Puffer zur Rettung!
Da Node all diese Details nicht kennt und nicht kennen kann, liest er die Datei nur Byte für Byte, ohne etwas über ihren Inhalt anzunehmen.
Und genau das ist der zurückgegebene Puffer: ein nicht mit Leidenschaft versehener Container für binären Rohinhalt. Wie dieser Inhalt interpretiert werden soll, liegt bei Ihnen als Entwickler.
Dies ist die einzige Antwort, die die Frage im Titel tatsächlich beantwortet .
Frzsombor
4
@frzsombor In Anbetracht , dass es eine akzeptierte Antwort, würde ich die OP übernehmen wirklich wurde in immer Strings statt Puffer interessiert und konnte es einfach nicht Phrase die Frage richtig. Trotzdem könnten andere Leute von Google mit dem eigentlichen "Warum" hierher kommen, daher meine Antwort. :)
Ein bisschen alt, aber es sollte bekannt sein, dass diese Lösung zusätzlichen Overhead verursacht, da buffer.toString()ohnehin die utf-8-Codierung vorausgesetzt wird. Dies wäre also gleichbedeutend mit der Antwort von @hvgotcodes (wenn auch langsamer als diese).
Brandon
14
Die dataVariable enthält ein BufferObjekt. Konvertieren Sie es mit der folgenden Syntax in ASCII-Codierung:
Async:
Synchronisieren:
quelle
Es wird ein Pufferobjekt zurückgegeben.
Wenn Sie es in einer Zeichenfolge möchten, können Sie es konvertieren mit
data.toString()
:quelle
buffer.toString()
ohnehin die utf-8-Codierung vorausgesetzt wird. Dies wäre also gleichbedeutend mit der Antwort von @hvgotcodes (wenn auch langsamer als diese).Die
data
Variable enthält einBuffer
Objekt. Konvertieren Sie es mit der folgenden Syntax in ASCII-Codierung:Asynchron:
quelle