2016-05-25 11 views
13

Używam biblioteki, która podczas wywołania funkcji zwraca wartość toString bufora.Konwertuj ciąg do bufora węzła

Dokładny kod jest

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

Ale nie chcę wersję ciąg niego.

Chcę tylko bufor

Więc jak przekonwertować ciąg z powrotem do bufora.

Coś jak gdyby

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

Jak to zrobić?

Próbowałem robić

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

Ale to rzuca UTF-8 nie jest funkcją. Kiedy zrobić

var buf = Buffer.from(bufStr); 

To rzuca TypeError: nie jest to wpisane tablicą.

Dzięki

Odpowiedz

27

można zrobić:

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

Ale to trochę głupie, więc kolejna propozycja będzie skopiować minimalną ilość kodu z wywołanej funkcji, aby umożliwić sobie dostęp do oryginalny bufor. Może to być dość łatwe lub dość trudne w zależności od szczegółów tej biblioteki.

+1

Próbowałem zrobić "Buffer.from (bufStr," utf- 8 '); 'ale mówi, że utf-8 nie jest funkcją. Jeśli pominiemy drugi argument utf-8, to wyrzuci TypeError: to nie jest tablica z typami. – Aniket

+5

@Aniket: Prawdopodobnie twoja wersja węzła jest starsza. Zamiast tego spróbuj po prostu 'Buffer (bufStr)', dopóki nie uaktualnisz. –

+0

Właściwie powinno to być "utf8", a nie "utf-8". Edytowano odpowiedź. –

2

Możesz użyć Buffer.from(), aby przekonwertować ciąg na bufor. Więcej informacji na ten temat można znaleźć here

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

np

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

Uwaga: Wystarczy przeksięgowanie komentarz Johna Zwinck jako odpowiedź.

Jednym z problemów może być to, że używasz starszej wersji Węzła (w tej chwili nie mogę uaktualnić bazy kodowej z v4.3.1). Prostym rozwiązaniem tutaj jest, przy użyciu przestarzałej sposób:

new Buffer(bufferStr) 
0

To działa dla mnie, może zmienić swój kod tak

var responseData=x.toString(); 

do

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

i wreszcie

response.write(new Buffer(toTransmit, "binary"));