Windows中的ruby base64解码函数限制为4KB

Windows中的ruby base64解码函数限制为4KB,ruby,base64,decode,encode,Ruby,Base64,Decode,Encode,我想从包含base64编码的png图像的xml中写入png文件。首先我试着这样做 if (captureImageB64.length > 1) pngFile = File.new("xxx.png", "wb") captureImageB64.unpack('m').first pngFile.close end 但这段代码生成4KB png图像。captureImageB64。首先打开“m”的包装。长度为4096。所以下一个版本是 if (captureI

我想从包含base64编码的png图像的xml中写入png文件。首先我试着这样做

if (captureImageB64.length > 1)
    pngFile = File.new("xxx.png", "wb")
    captureImageB64.unpack('m').first
    pngFile.close
end
但这段代码生成4KB png图像。captureImageB64。首先打开“m”的包装。长度为4096。所以下一个版本是

if (captureImageB64.length > 1)
    pngFile = File.new("xxx.png", "wb")
    i = 0
    while i < captureImageB64.length
        pngFile.write(captureImageB64.slice(i, 12).unpack('m').first)
        i += 12
    end
    pngFile.close
end
它会生成损坏的png文件。到4096年是可以的。如何编写正确的文件

我在Windows7上工作,ruby 2.0x86

更新:


我在编码为base64的图像文件中找到了填充字符串==。所以它被编码为每个4096字节!没有人告诉我那件事。。。我将制作一个新的编码器组件。

所以,您的问题是,您试图解码base64切片的位置看起来像是随机的,不按字节对齐。也许可以看一看,了解更多有关找到正确偏移量的信息。谢谢,您的评论。base64将3个字符解码为4个字节。所以它不是随机位置。如果它生成了损坏的数据,它可能是最后一部分,因为它需要填充。事实上我试了3次。我不知道为什么它会产生3字节的输出文件。你能试着将整个文件解码到内存中,然后以4k的步长写入吗?可能是你的写缓冲区溢出了。我想把整个文件解码一次。captureImageB64.打开我的行李.第一个是4096。如何设置缓冲区大小?不,您不需要。因为在第二个例子中,你是分块做的。你没有理由把所有的东西都读入记忆。