Sim*_*oV8 4 javascript base64 decoding node.js
我正在尝试解码表示存储在db中的图像的base64字符串.我在SO上尝试了很多库和解决方案,但我仍然无法正确解码图像.特别是,使用以下代码:
var img = new Buffer(b64, 'base64').toString('ascii');
Run Code Online (Sandbox Code Playgroud)
我得到一个类似的二进制表示,除了第一个字节.这是base64字符串的初始部分:
/9j/4RxVRXhpZgAASUkqAAgAAAANADIBAgAUAAAAqgAAACWIBAABAAAAiwYAABABAgAIAAAAvgAA
Run Code Online (Sandbox Code Playgroud)
以下是原始图像的前50个字节:
ffd8ffe11c5545786966000049492a00080000000d003201020014000000aa00000025880400010000008b06000010010200
Run Code Online (Sandbox Code Playgroud)
这里是我用javascript获得的字符串的前50个字节:
7f587f611c5545786966000049492a00080000000d0032010200140000002a00000025080400010000000b06000010010200
Run Code Online (Sandbox Code Playgroud)
你怎么看,这两个字符串是相同的,除了fisrt 3字节和中间几个字节.
有人可以帮助我理解为什么会这样,以及如何解决它?谢谢
问题是你试图将二进制数据转换为ASCII,这很可能意味着数据丢失,因为ASCII只包含值0x00-0x7F.因此,当转换发生时,所有字节> 0x7F的上限为0x7F.
如果您这样做,您可以看到数据与原始图像的前50个字节匹配:
console.log(new Buffer(b64, 'base64').toString('hex'));
Run Code Online (Sandbox Code Playgroud)
但是如果你想保持二进制数据不变,只需将它作为Buffer实例保留而不调用.toString(),因为许多使用二进制数据的函数可以处理Buffers(例如fs核心模块).