2017-02-01 2 views
0

서버와의 통신으로 인해 바이너리와 base64 사이의 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로 변환하는 것은 불가능합니다. 따라서이 작업을 수행하려면 인코딩 만 지정하면됩니다.

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 

그러나 utf-8이이 문제를 일으키는 이유는 궁금합니다. 누군가가 나에게 손을 대면 큰 도움이됩니다.

+0

아 'from (data, encoding)'을 놓쳤다. ... 잘 알고있다. – Kaiido

관련 문제