2016-05-25 10 views
13

Sto utilizzando una libreria che su richiesta di una funzione restituisce il toString di un buffer.Converti stringa nel buffer Nodo

Il codice esatto è

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

Ma io non voglio la versione stringa di esso.

Voglio solo il buffer

Così come convertire stringa di nuovo a tamponare.

Qualcosa come se

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

Come fare questo?

Ho provato a fare

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

Ma getta utf-8 non è una funzione. Quando faccio

var buf = Buffer.from(bufStr); 

getta TypeError: questa non è una matrice tipizzata.

Grazie

risposta

27

Si può fare:

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

ma questo è un po 'sciocco, quindi un altro suggerimento sarebbe quello di copiare la quantità minima di codice di fuori della funzione chiamata per concedersi l'accesso al buffer originale. Questo potrebbe essere abbastanza facile o abbastanza difficile a seconda dei dettagli di quella libreria.

+1

Ho provato a fare 'Buffer.from (bufStr, 'utf- 8 '); 'ma dice che utf-8 non è una funzione. Se ometto il secondo argomento utf-8, lancia l'errore TypeError: questo non è un array tipizzato. – Aniket

+5

@Aniket: probabilmente la tua versione del nodo è più vecchia. Prova solo "Buffer (bufStr)" invece di aggiornarlo. –

+0

In realtà, dovrebbe essere "utf8" e non "utf-8". Modificato la risposta. –

2

È possibile utilizzare Buffer.from() per convertire una stringa nel buffer. Ulteriori informazioni su questo si possono trovare here

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

ad esempio

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

Nota: Basta reinserire il commento di John Zwinck come risposta.

Un problema potrebbe essere che si sta utilizzando una versione precedente di Nodo (per il momento, non posso aggiornare, codebase colpito con v4.3.1). Semplice soluzione è, utilizzando il modo deprecato:

new Buffer(bufferStr) 
0

Questo sta lavorando per me, si potrebbe modificare il codice come questo

var responseData=x.toString(); 

a

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

e infine

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