2014-11-03 22 views
5

Meine App importiert alle Nachrichten aus dem Notes-Ordner von Google Mail. Ich benutze IMAP NPM-Modul dafür.Konvertieren Puffer base64 -> utf8 Codierung node.js

Am Beispiel von ihrer Github Seite ich alle Inhalte einer Nachricht in einen Puffer erhalten:

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

Doch was ich bekommen sind Sätze wie

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

(falsche Umwandlung von Russisch)

Ich fand heraus, dass dies die Schnipsel von Text in Base64 codiert sind und um sie zu lesen, muss ich es von base64 zu utf8 konvertieren.

Es gibt auch manchmal ein lästiges = Zeichen, das aus dem Nichts erscheint ...

letting them f= all on her shoulders 

Wissen Sie, wie ich diese beiden Probleme loswerden könnte?

Vielen Dank!

+1

um von base64 zu konvertieren Sie 'können in uTF8 (neu Buffer (original: 'base64')). toString ('UTF-8')'. Könnten Sie mehr Details über das '=' Problem geben? – jabclab

+0

@jabclab das funktioniert, aber nur für die Puffer, die nur Russisch enthalten. Wenn es einen Puffer gibt, der nur englischen Text oder Englisch und Russisch hat, erzeugt es Kauderwelsch. Ich denke, ich muss vor der Konvertierung ein Skript ausführen, um die Codierung zu identifizieren, oder? –

+0

@jabclab bezüglich des = Problems - aus irgendeinem Grund wird manchmal das = Zeichen einfach zufällig in den Text eingefügt. Ich kann nicht scheinen, wo genau es erscheint ... Danke! –

Antwort

11

Um von einem Base64 zu konvertieren codiert String auf UTF8 Sie die folgende verwenden:

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

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

'neue Buffer()' ist veraltet mit * Stabilität: 0 *, siehe [Midos Antwort] (https://stackoverflow.com/a/40929309/1168315). – Dominik

11

new Buffer(...) wurde für eine Weile jetzt veraltet, gehen für Buffer.from(...)

ein einfaches Beispiel sein könnte:

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