解码node.js中的Base64字符串

时间:2015-09-06 17:06:07

标签: javascript node.js base64 decoding

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

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

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

/9j/4RxVRXhpZgAASUkqAAgAAAANADIBAgAUAAAAqgAAACWIBAABAAAAiwYAABABAgAIAAAAvgAA

以下是原始图像的前50个字节:

ffd8ffe11c5545786966000049492a00080000000d003201020014000000aa00000025880400010000008b06000010010200

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

7f587f611c5545786966000049492a00080000000d0032010200140000002a00000025080400010000000b06000010010200

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

1 个答案:

答案 0 :(得分:9)

问题是你试图将二进制数据转换为ASCII,这很可能意味着数据丢失,因为ASCII只包含值0x00-0x7F。因此,当转换发生时,所有字节都> 0x7F的上限为0x7F。

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

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

但是如果你想保持二进制数据不变,只需将它保留为Buffer实例而不调用.toString(),因为许多使用二进制数据的函数都可以处理Buffers(例如fs核心模块)。