2017-02-01 16 views
0

サーバとの通信のためにバイナリとベース64の間のpngを変換する必要があります。しかし、私がバッファを使用すると、直接base64でファイルを読み取ってからバイナリでファイルを読み込んでからbase64に変換することに矛盾があります。バイナリとbase64の間の変換時のJavascriptバッファの不一致

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 

矛盾の原因は何ですか?

+0

奇妙なことに、データ1をバッファに入れていると思う唯一のことは、文字列ターミネータが含まれていることです。 – awiebe

+0

どちらも、base64で直接ファイルを読み込んでいませんか? – Bergi

答えて

1

私はこの問題を発見したと思います。誰かが触れたように、デフォルトのエンコーディングはutf-8です。しかし、utf-8は情報の損失を招くので、base64に戻すことは不可能です。したがって、これを動作させるには、エンコーディングを指定するだけで済みます。 UTF-8は、この問題が発生するだろうし、誰かが私に手を出すならば、それは素晴らしいことだ、なぜ

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 

はしかし、私は興味があります。

+0

ああ、私は 'from(data、encoding)'を見逃していました。 – Kaiido

関連する問題