Try it yourself with our free Base64 tool — runs entirely in your browser, no signup needed.

How to Base64 encode in Ruby

How to Base64 encode in Ruby

Base64 encoding is a widely used method for converting binary data into a text format that can be easily transmitted or stored. In Ruby, Base64 encoding is a common operation when working with images, files, or other binary data. In this guide, we'll explore how to Base64 encode in Ruby, covering the basics, common edge cases, and performance tips.

Quick Example

Here's a minimal example of how to Base64 encode a string in Ruby:

require 'base64'

input_string = "Hello, World!"
encoded_string = Base64.strict_encode64(input_string)
puts encoded_string

This code will output the Base64 encoded string: SGVsbG8sIFdvcmxkIQ==.

Step-by-Step Breakdown

Let's walk through the code line by line:

  • require 'base64': We require the base64 library, which is part of the Ruby Standard Library.
  • input_string = "Hello, World!": We define a string that we want to encode.
  • encoded_string = Base64.strict_encode64(input_string): We use the strict_encode64 method to encode the input string. The strict variant of the method will raise an error if the input string is invalid.
  • puts encoded_string: We print the encoded string to the console.

Note that we're using the strict_encode64 method instead of the encode64 method. The encode64 method will pad the input string with newline characters if it's not a multiple of 3 bytes long, which can lead to issues when decoding the string. The strict_encode64 method avoids this issue by raising an error if the input string is invalid.

Handling Edge Cases

Here are some common edge cases to consider:

Empty/Null Input

If the input string is empty or null, the strict_encode64 method will raise an error. To handle this case, you can add a simple check:

input_string = ""
if input_string.present?
  encoded_string = Base64.strict_encode64(input_string)
else
  encoded_string = ""
end

Invalid Input

If the input string is invalid (e.g., contains non-ASCII characters), the strict_encode64 method will raise an error. To handle this case, you can use the encode64 method instead, which will return a padded string:

input_string = " invalid input "
encoded_string = Base64.encode64(input_string)

Large Input

If the input string is very large, the strict_encode64 method may raise a RangeError due to the limitations of the Ruby String class. To handle this case, you can use the encode64 method in chunks:

input_string = "a" * 1000000
chunk_size = 1000
encoded_string = ""
while input_string.size > 0
  chunk = input_string.slice!(0, chunk_size)
  encoded_string << Base64.encode64(chunk)
end

Unicode/Special Characters

If the input string contains Unicode or special characters, the strict_encode64 method will raise an error. To handle this case, you can use the encode64 method with the :utf8 encoding:

input_string = "héllo"
encoded_string = Base64.encode64(input_string, :utf8)

Common Mistakes

Mistake 1: Using encode64 instead of strict_encode64

# Wrong
encoded_string = Base64.encode64(input_string)

# Correct
encoded_string = Base64.strict_encode64(input_string)

Mistake 2: Not handling empty/null input

# Wrong
encoded_string = Base64.strict_encode64(input_string)

# Correct
if input_string.present?
  encoded_string = Base64.strict_encode64(input_string)
else
  encoded_string = ""
end

Mistake 3: Not handling large input

# Wrong
encoded_string = Base64.strict_encode64(input_string)

# Correct
chunk_size = 1000
encoded_string = ""
while input_string.size > 0
  chunk = input_string.slice!(0, chunk_size)
  encoded_string << Base64.encode64(chunk)
end

Performance Tips

Tip 1: Use strict_encode64 for small inputs

For small inputs, the strict_encode64 method is faster and more secure than the encode64 method.

Tip 2: Use encode64 in chunks for large inputs

For large inputs, the encode64 method in chunks is faster and more efficient than the strict_encode64 method.

Tip 3: Avoid unnecessary encoding and decoding

If you're working with binary data, try to avoid encoding and decoding it unnecessarily. Instead, work with the binary data directly.

FAQ

Q: What is the difference between encode64 and strict_encode64?

A: The strict_encode64 method raises an error if the input string is invalid, while the encode64 method returns a padded string.

Q: How do I handle empty/null input?

A: You can add a simple check to handle empty/null input: if input_string.present?.

Q: How do I handle large input?

A: You can use the encode64 method in chunks to handle large input.

Q: How do I handle Unicode/special characters?

A: You can use the encode64 method with the :utf8 encoding to handle Unicode/special characters.

Q: What is the performance impact of using strict_encode64?

A: The strict_encode64 method is faster and more secure than the encode64 method for small inputs, but slower for large inputs.

AI agent tools available. The CodeTidy MCP Server gives Claude, Cursor, and other AI agents access to 60+ developer tools. One command: npx @codetidy/mcp