Base64 Encoding in Ruby
Ruby's Base64 module provides methods for encoding and decoding.
Basic Usage
Encode to Base64
require 'base64'
text = "Hello, World!"
encoded = Base64.encode64(text)
puts encoded # "SGVsbG8sIFdvcmxkIQ==\n" Decode from Base64
require 'base64'
encoded = "SGVsbG8sIFdvcmxkIQ=="
decoded = Base64.decode64(encoded)
puts decoded # "Hello, World!" Strict Encoding (No Line Breaks)
Use strict_encode64 for output without line breaks:
require 'base64'
text = "Hello, World!"
encoded = Base64.strict_encode64(text)
puts encoded # "SGVsbG8sIFdvcmxkIQ=="
decoded = Base64.strict_decode64(encoded)
puts decoded # "Hello, World!" URL-Safe Base64
Use urlsafe_encode64 for URL-safe encoding:
require 'base64'
text = "Hello, World!"
# With padding
encoded = Base64.urlsafe_encode64(text)
puts encoded
# Without padding
encoded_no_pad = Base64.urlsafe_encode64(text, padding: false)
puts encoded_no_pad
# Decode
decoded = Base64.urlsafe_decode64(encoded)
puts decoded File to Base64
Encode a File
require 'base64'
content = File.binread('image.png')
encoded = Base64.strict_encode64(content)
puts encoded Decode to File
require 'base64'
encoded = "iVBORw0KGgo..." # Base64 string
decoded = Base64.strict_decode64(encoded)
File.binwrite('output.png', decoded) Data URL
Create a Data URL from a file:
require 'base64'
require 'marcel' # gem install marcel
def file_to_data_url(filepath)
content = File.binread(filepath)
mime = Marcel::MimeType.for(Pathname.new(filepath))
encoded = Base64.strict_encode64(content)
"data:#{mime};base64,#{encoded}"
end
puts file_to_data_url('image.png') One-Liner
# Encode
ruby -rbase64 -e "puts Base64.strict_encode64('Hello')"
# Decode
ruby -rbase64 -e "puts Base64.strict_decode64('SGVsbG8=')" Pack/Unpack Alternative
Ruby's pack/unpack can also do Base64:
# Encode
encoded = ["Hello, World!"].pack('m0')
puts encoded # "SGVsbG8sIFdvcmxkIQ=="
# Decode
decoded = "SGVsbG8sIFdvcmxkIQ==".unpack1('m0')
puts decoded # "Hello, World!" Rails Helper
In Rails, you can also use:
# In views or helpers
<%= base64_encode("Hello") %>
# For images
<%= image_tag("data:image/png;base64,#{Base64.strict_encode64(File.binread('image.png'))}")%> Handling Binary Data
require 'base64'
# Ensure binary encoding
binary_data = "\x00\x01\x02\x03".force_encoding('BINARY')
encoded = Base64.strict_encode64(binary_data)
decoded = Base64.strict_decode64(encoded)
puts decoded.bytes.inspect # [0, 1, 2, 3]