2017-02-01 3 views
0

Ich muss ein Png zwischen Binär-und Base64 aufgrund der Kommunikation mit dem Server zu konvertieren. Wenn ich Puffer verwende, besteht jedoch eine Inkonsistenz zwischen dem direkten Lesen der Datei in base64 und dem Lesen der Datei im Binärformat und dem anschließenden Konvertieren in base64.Javascript Puffer Inkonsistenz bei der Konvertierung zwischen Binär-und Base64

const fs = require('fs'); 
var data1 = Buffer.from(fs.readFileSync('test.png')).toString(); 
data1 = Buffer.from(data1).toString('base64'); 
var data2 = Buffer.from(fs.readFileSync('test.png')).toString('base64'); 
data1 == data2; //false 

Was könnte die Diskrepanz verursachen?

+0

Seltsam, das einzige Ding, das ich denken kann, data1 in einen Puffer zu setzen, schließt den Schnurterminator ein. – awiebe

+0

Keiner von denen liest die Datei direkt in base64? – Bergi

Antwort

1

Ich denke, ich habe das Problem gefunden. Wie bereits erwähnt, ist die Standardcodierung utf-8. Es scheint jedoch, dass utf-8 einen Informationsverlust verursacht, so dass es unmöglich ist, es zurück in base64 zu konvertieren. Daher muss nur die Codierung angegeben werden, damit dies funktioniert.

const fs = require('fs'); 
var data1 = Buffer.from(fs.readFileSync('test.png')).toString('binary'); 
data1 = Buffer.from(data1,'binary').toString('base64'); 
var data2 = Buffer.from(fs.readFileSync('test.png')).toString('base64'); 
data1 == data2; //true 

Aber ich bin neugierig, warum utf-8 würde dieses Problem verursacht, und es wäre toll, wenn jemand mir eine Hand geben würde.

+0

Ah ich vermisste das 'aus (Daten, Kodierung)' ... Gut zu wissen. – Kaiido

Verwandte Themen