在二进制和 Base64 之间转换时 JavaScript 缓冲区不一致

标签 javascript

由于与服务器的通信,我需要在二进制和 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/

相关文章:

javascript - Selenium webdriver TypeError : element. isDisplayed is not a function

javascript - 随着图表宽度的增加,Highcharts 宽度继续扩大

javascript - 是否可以从 angularjs 中的服务访问 $cookieStore?

javascript - JS获取未知单键对象的值

javascript - requestAnimationFrame 什么时候执行?

javascript - 为什么 javascript 中的 parseFloat 为我返回字符串类型?

javascript - 如何在仅使用 CSS3 悬停时更改表格单元格的文本

javascript - 使用 enzyme 进行 react 测试 react chop

javascript - 动态选择列表 AJAX 并通过发布表单插入数据库表

javascript - 如何使用 javaScript 重新加载页面一次