2014-11-03 14 views
5

La mia app importa tutti i messaggi dalla cartella Notes di GMail. Io uso il modulo imap npm per quello.Converti buffer base64 -> utf8 encoding node.js

Utilizzando l'esempio dalla loro pagina github ricevo tutti i contenuti di un messaggio in un buffer:

stream.on('data', function(chunk) { 
    count += chunk.length; 
    buffer += chunk.toString('utf8'); 
}); 

Tuttavia, quello che ottiene sono frasi come

0KHQvdCw0YfQsNC70LAg0YHQvtC30LTQsNC10YLRgdGPINGA0LXRiNC10YLQutCwINC/0YDQvtGB 0YLRgNCw0L3RgdGC0LLQsCDQstC+0L7QsdGA0LDQttC10L3QuNGPLiZuYnNwOzxkaXY+PGJyPjwv ZGl2PjxkaXY+0JfQsNGC0LXQvCDQvdCwI 

(conversione sbagliato dal russo)

Ho scoperto che questi sono i frammenti di testo codificati in base64 e per poterli leggere ho bisogno di convertirlo da base64 a utf8.

C'è anche talvolta un fastidioso = personaggio che appare dal nulla ...

letting them f= all on her shoulders 

Sai come ho potuto sbarazzarsi di questi due problemi?

Grazie!

+1

per convertire da Base64 a UTF8 è possibile utilizzare '(nuovo buffer (originale, 'base64')). toString ('utf8')'. Potresti fornire maggiori dettagli sul problema '='? – jabclab

+0

@jabclab funziona, ma solo per i buffer che contengono solo russo. se c'è un buffer che ha solo testo inglese o inglese e russo, produce incomprensibili. Immagino di dover eseguire alcuni script prima della conversione per identificare la codifica, giusto? –

+0

@jabclab riguardo al problema = - per qualche ragione a volte il segno = viene inserito a caso nel testo. non riesco a trovare dove appaia esattamente ... grazie! –

risposta

11

Per convertire da un Base64 String a utf8 è possibile utilizzare il seguente:

var base64encoded = '0KHQvdCw0YfQsNC70LAg0YHQvtC30LTQsNC10YLRgdGPINGA0LXRiNC10YLQutCwINC/0YDQvtGB 0YLRgNCw0L3RgdGC0LLQsCDQstC+0L7QsdGA0LDQttC10L3QuNGPLiZuYnNwOzxkaXY+PGJyPjwv ZGl2PjxkaXY+0JfQsNGC0LXQvCDQvdCwI'; 

var utf8encoded = (new Buffer(base64encoded, 'base64')).toString('utf8'); 
//^'Сначала создается решетка пространства воображения.&nbsp;<div><br></div><div>Затем на' 
+0

'nuovo Buffer()' è obsoleto con * Stabilità: 0 *, vedere [risposta di mido] (https://stackoverflow.com/a/40929309/1168315). – Dominik

11

new Buffer(...) è stato deprecato per un po ', andare per Buffer.from(...)

un semplice esempio potrebbe essere:

var utf8encoded = Buffer.from(base64encoded, 'base64').toString('utf8');