Extended maintenance of Ruby versions 1.8.7 and 1.9.2 ended on July 31, 2014. Read more

In Files

  • base64.rb

Class/Module Index [+]

Quicksearch

Base64

The Base64 module provides for the encoding (#encode64) and decoding (#decode64) of binary data using a Base64 representation.

The following particular features are also provided:

  • encode into lines of a given length (#b64encode)

  • decode the special format specified in RFC2047 for the representation of email headers (decode_b)

Example

A simple encoding and decoding.

require "base64"

enc   = Base64.encode64('Send reinforcements')
                    # -> "U2VuZCByZWluZm9yY2VtZW50cw==\n" 
plain = Base64.decode64(enc)
                    # -> "Send reinforcements"

The purpose of using base64 to encode data is that it translates any binary data into purely printable characters. It is specified in RFC 2045 (www.faqs.org/rfcs/rfc2045.html).

Public Instance Methods

b64encode(bin, len = 60) click to toggle source

Prints the Base64 encoded version of bin (a String) in lines of len (default 60) characters.

require 'base64'
data = "Now is the time for all good coders\nto learn Ruby" 
Base64.b64encode(data)

Generates:

Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g
UnVieQ==
 
               # File base64.rb, line 112
def b64encode(bin, len = 60)
  encode64(bin).scan(/.{1,#{len}}/) do
    print $&, "\n"
  end
end
            
decode64(str) click to toggle source

Returns the Base64-decoded version of str.

require 'base64'
str = 'VGhpcyBpcyBsaW5lIG9uZQpUaGlzIG' +
      'lzIGxpbmUgdHdvClRoaXMgaXMgbGlu' +
      'ZSB0aHJlZQpBbmQgc28gb24uLi4K'
puts Base64.decode64(str)

Generates:

This is line one
This is line two
This is line three
And so on...
 
               # File base64.rb, line 58
def decode64(str)
  str.unpack("m")[0]
end
            
decode_b(str) click to toggle source

Decodes text formatted using a subset of RFC2047 (the one used for mime-encoding mail headers).

Only supports an encoding type of ‘b’ (base 64), and only supports the character sets ISO-2022-JP and SHIFT_JIS (so the only two encoded word sequences recognized are =?ISO-2022-JP?B?...= and =?SHIFT_JIS?B?...=). Recognition of these sequences is case insensitive.

 
               # File base64.rb, line 72
def decode_b(str)
  str.gsub!(/=\?ISO-2022-JP\?B\?([!->@-~]+)\?=/i) {
    decode64($1)
  }
  str = Kconv::toeuc(str)
  str.gsub!(/=\?SHIFT_JIS\?B\?([!->@-~]+)\?=/i) {
    decode64($1)
  }
  str = Kconv::toeuc(str)
  str.gsub!(/\n/, ' ') 
  str.gsub!(/\0/, '')
  str
end
            
encode64(bin) click to toggle source

Returns the Base64-encoded version of str.

require 'base64'
Base64.b64encode("Now is the time for all good coders\nto learn Ruby")

Generates:

Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g
UnVieQ==
 
               # File base64.rb, line 96
def encode64(bin)
  [bin].pack("m")
end
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.

blog comments powered by Disqus