(J)Ruby:使用 Jruby 或 Ruby 的 [].pack('m') 的不同结果

发布于 2024-10-20 17:42:07 字数 319 浏览 3 评论 0原文

我想将 jpeg 图像编码为 base64。 谷歌搜索,我有这样的代码:

name = 'path_to_file'
b64 = [open(name).read].pack('m')
puts b64.size

如果这个代码用Jruby1.5.1(带有netbeans)执行,则大小的结果(与我的图像)为3518,但如果用ruby 1.8.7执行,则大小为90。 传递到 html 文件时,只有使用 JRuby 编码的文件才有效。

有人知道这是什么原因吗? 提前致谢。 注意:在Windows中运行,我还没有接触过ruby1.8.7代码。

I want to encode a jpeg image to base64.
Googling, i have this code:

name = 'path_to_file'
b64 = [open(name).read].pack('m')
puts b64.size

If this code its executed with Jruby1.5.1 (come with netbeans), the result of the size(with my image) its 3518, but if its executed with ruby 1.8.7, the size its 90.
Passing to an html file, only the encoded with JRuby works.

Someone know the reason of this?
Thanks in advance.
Notes: Running in Windows, and i hasn't touched the ruby1.8.7 code.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

诗酒趁年少 2024-10-27 17:42:07

根据您是否以二进制模式打开文件,Windows 会有不同的行为;将该行更改为:

b64 = [open(name, 'rb').read].pack('m')

Windows has different behaviour depending upon whether you open the file in binary mode or not; change that line to:

b64 = [open(name, 'rb').read].pack('m')
久而酒知 2024-10-27 17:42:07

我在 Linux 上的 jruby 1.5.1 RVM 和 Linux 上的 Ruby 1.8.7 中得到相同的大小。我怀疑您只是出于某种原因对路径进行编码。尝试打印 open(name).read 并确保您的文件已成功打开和读取。我不认为是这样。

jruby-1.5.1 :001 >  [open("test.jpg").read].pack('m').size
 => 3274 

ruby-1.8.7-p302 :003 > [open("test.jpg").read].pack('m').size
 => 3274 

I am getting the same sizes in jruby 1.5.1 RVM on Linux and Ruby 1.8.7 on Linux. I suspect that you are only encoding the path for some reason. Try printing open(name).read and assure your file is being opened and read successfully. I do not think that it is.

jruby-1.5.1 :001 >  [open("test.jpg").read].pack('m').size
 => 3274 

ruby-1.8.7-p302 :003 > [open("test.jpg").read].pack('m').size
 => 3274 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文