由于与服务器的通信,我需要在二进制和 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
什么可能导致差异?
最佳答案
我想我已经找到问题了。正如其他人提到的,默认编码是 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 会导致这个问题,如果有人能帮助我那就太好了。
关于在二进制和 Base64 之间转换时 JavaScript 缓冲区不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41971775/