String in Pufferknoten konvertieren


76

Ich verwende eine Bibliothek, die beim Aufruf einer Funktion den toString eines Puffers zurückgibt.

Der genaue Code ist

return Buffer.concat(stdOut).toString('utf-8');

Aber ich möchte keine String-Version davon.

Ich will nur den Puffer

So konvertieren Sie einen String zurück in einen Puffer.

So etwas wie wenn

var bufStr = Buffer.concat(stdOut).toString('utf-8');
//convert bufStr back to only Buffer.concat(stdOut).

Wie macht man das?

Ich habe es versucht

var buf = Buffer.from(bufStr, 'utf-8');

Aber es wirft utf-8 ist keine Funktion. Wenn ich es tue

var buf = Buffer.from(bufStr);

Es wird TypeError ausgelöst: Dies ist kein typisiertes Array.

Vielen Dank

Antworten:


144

Du kannst tun:

var buf = Buffer.from(bufStr, 'utf8');

Dies ist jedoch etwas albern. Ein weiterer Vorschlag wäre, die minimale Codemenge aus der aufgerufenen Funktion zu kopieren, um sich den Zugriff auf den ursprünglichen Puffer zu ermöglichen. Dies kann abhängig von den Details dieser Bibliothek recht einfach oder ziemlich schwierig sein.


1
Ich habe es versucht, Buffer.from(bufStr, 'utf-8');aber es heißt, utf-8 ist keine Funktion. Wenn ich das zweite Argument utf-8 weglasse, wird TypeError ausgelöst: Dies ist kein typisiertes Array.
Aniket

6
@Aniket: Wahrscheinlich ist deine Node-Version älter. Versuchen Sie es Buffer(bufStr)stattdessen, bis Sie ein Upgrade durchführen.
John Zwinck

1
Eigentlich sollte es 'utf8' und nicht 'utf-8' sein. Antwort bearbeitet.
Elad Nava

iconv-liteist besser, weil es Standard-Zeichensatznamen aus der Welt der Client-js (wie utf-8) verwendet, die NodeJS-Neudefinitionen (wie utf8) installieren .
user1742529

1
Buffer.from(str)ist genug, da 'utf8' Standard ist. nodejs.org/api/…
bobmoff

11

Hinweis: Nur den Kommentar von John Zwinck als Antwort erneut veröffentlichen.

Ein Problem könnte sein, dass Sie eine ältere Version von Node verwenden (im Moment kann ich kein Upgrade durchführen, Codebasis ist betroffen v4.3.1). Eine einfache Lösung ist hier die Verwendung der veralteten Methode:

new Buffer(bufferStr)

9

Sie können Buffer.from()eine Zeichenfolge in einen Puffer konvertieren. Weitere Informationen hierzu finden Sie hier

var buf = Buffer.from('some string', 'encoding');

zum Beispiel

var buf = Buffer.from(bStr, 'utf-8');

2

Das funktioniert bei mir, Sie könnten Ihren Code so ändern

var responseData=x.toString();

zu

var responseData=x.toString("binary");

und schlussendlich

response.write(new Buffer(toTransmit, "binary"));
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.