由于与服务器的通信,我需要在二进制和base64之间转换png。但是,当我使用缓冲区时,直接读取base64中的文件与读取二进制文件然后转换为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
可能导致这种差异的原因是什么?
答案 0 :(得分: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会导致这个问题,如果有人愿意帮助我,那将会很棒。