解码Node.js中的Base64字符串

问题描述 投票:4回答:1

我正在尝试解码表示存储在数据库中的图像的base64字符串。我尝试了许多SO上提供的库和解决方案,但仍然无法正确解码图像。特别是,使用以下代码:

var img = new Buffer(b64, 'base64').toString('ascii');

除了第一个字节外,我得到了类似的二进制表示形式。这是base64字符串的初始部分:

/9j/4RxVRXhpZgAASUkqAAgAAAANADIBAgAUAAAAqgAAACWIBAABAAAAiwYAABABAgAIAAAAvgAA

这里是原始图像的前50个字节:

ffd8ffe11c5545786966000049492a00080000000d003201020014000000aa00000025880400010000008b06000010010200

这是我使用javascript获得的字符串的前50个字节:

7f587f611c5545786966000049492a00080000000d0032010200140000002a00000025080400010000000b06000010010200

您怎么看,两个字符串相同,除了第一个3个字节和中间的几个字节。有人可以帮助我了解为什么会这样以及如何解决吗?谢谢

javascript node.js base64 decoding
1个回答
9
投票

问题是您试图将二进制数据转换为ASCII,这很可能会导致数据丢失,因为ASCII仅包含值0x00-0x7F。因此,在进行转换时,所有> 0x7F的字节均以0x7F为上限。

如果您改为这样做,则可以看到数据与原始图像的前50个字节相匹配:

console.log(Buffer.from(b64, 'base64').toString('hex'));

但是如果要保持二进制数据完整无缺,只需将其作为Buffer实例而不用调用.toString(),因为许多处理二进制数据的函数都可以处理Buffers(例如fs核心模块)。

© www.soinside.com 2019 - 2024. All rights reserved.