binary file to base64 in 1.9.2


I use a web service for delivering snailmail. I prepare a zip-file
containing pdf for the letter, receivers and so on, encode it in
base64 and send it as base 64 in my request. It won't work in 1.9.2
(the zip gets corrupted) but works fine in 1.8.7. I guess it's
something with how binary strings are handled. This is the code that
works in 1.8.7:

file_data =,"rb") {|io|}
file_data_64 = Base64.encode64(file_data)

Does anyone know how to do this in 1.9.2?


require "base64"

content = File.binread("filename")
encoded = Base64.encode64(content)

There you go.

That worked well in 1.8.7, but not in 1.9.2.

The next thing I do is:
response = client.request :sendWithAddressing, :body => { :in0 =>
file_data_64, :in1 => 'ebrevwebb', :in2 => 'jebkb', :in3 =>
'ebrevwebb' }

With exactly the same ruby code the encoded file in the request starts
the same but then there are diffrences. The length of the encoded file
in the request is 4803 chars in 1.8.7 and 4864 chars in 1.9.2. The
receiving end does not accept the request from 1.9.2 saying it's an
illegal zip.

Dunno what are you doing, but works fine for me:

C:\Users\Luis>ruby -v
ruby 1.9.2p290 (2011-07-09) [i386-mingw32]

irb(main):001:0> require "base64"
=> true
irb(main):002:0> content = File.binread(".TransferManager.db"); nil
=> nil
irb(main):003:0> content.length
=> 15388
irb(main):004:0> encoded = Base64.encode64(content); nil
=> nil
irb(main):005:0> encoded.length
=> 20862

The 'nil' at the end is to avoid the entire binary file output in this

PS: there is no "File.binread" in Ruby 1.8.7, so dunno how that

Well, the binread works fine for me. I tried to create a file from the
encoded data and that looks fine, so the problem is something else.

I wonder if # encoding: utf-8 first in the file can mess things up.