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

How to Base64 encode in JavaScript

How to Base64 encode in JavaScript

Base64 encoding is a widely used method for converting binary data into a text format that can be easily transmitted or stored. In JavaScript, Base64 encoding is commonly used for tasks such as encoding images, audio files, and other binary data for transmission over the web or storage in databases. In this article, we will explore how to Base64 encode in JavaScript, covering the basics, handling edge cases, common mistakes, and performance tips.

Quick Example

Here is a minimal example of how to Base64 encode a string in JavaScript:

const base64Encoded = btoa('Hello, World!');
console.log(base64Encoded); // Output: "SGVsbG8sIFdvcmxkIQ=="

This example uses the btoa() function, which is a built-in JavaScript function that converts a string to a Base64 encoded string.

Step-by-Step Breakdown

Let's break down the code line by line:

  • const base64Encoded =: This line declares a constant variable base64Encoded that will hold the Base64 encoded string.
  • btoa('Hello, World!'): This line calls the btoa() function, passing in the string 'Hello, World!' as an argument. The btoa() function converts the string to a Base64 encoded string.
  • console.log(base64Encoded): This line logs the Base64 encoded string to the console.

Note that the btoa() function assumes that the input string is a string of ASCII characters. If the input string contains non-ASCII characters, you may need to use a different approach, such as using the TextEncoder API.

Handling Edge Cases

Here are some common edge cases to consider when Base64 encoding in JavaScript:

Empty/Null Input

If the input string is empty or null, the btoa() function will throw an error. To handle this case, you can add a simple check:

const input = '';
if (input) {
  const base64Encoded = btoa(input);
  console.log(base64Encoded);
} else {
  console.log('Input is empty or null');
}

Invalid Input

If the input string contains non-ASCII characters, the btoa() function may produce unexpected results. To handle this case, you can use the TextEncoder API to convert the input string to a Uint8Array, and then use the btoa() function:

const input = 'Hello, World!';
const encoder = new TextEncoder('utf-8');
const uint8Array = encoder.encode(input);
const base64Encoded = btoa(String.fromCharCode.apply(null, uint8Array));
console.log(base64Encoded);

Large Input

If the input string is very large, the btoa() function may throw an error or produce unexpected results. To handle this case, you can use the Blob API to split the input string into smaller chunks, and then use the btoa() function:

const input = 'very large string...';
const chunkSize = 1024;
const chunks = [];
for (let i = 0; i < input.length; i += chunkSize) {
  const chunk = input.slice(i, i + chunkSize);
  const base64Encoded = btoa(chunk);
  chunks.push(base64Encoded);
}
const finalBase64Encoded = chunks.join('');
console.log(finalBase64Encoded);

Unicode/Special Characters

If the input string contains Unicode or special characters, the btoa() function may produce unexpected results. To handle this case, you can use the TextEncoder API to convert the input string to a Uint8Array, and then use the btoa() function:

const input = 'Hello, World!';
const encoder = new TextEncoder('utf-8');
const uint8Array = encoder.encode(input);
const base64Encoded = btoa(String.fromCharCode.apply(null, uint8Array));
console.log(base64Encoded);

Common Mistakes

Here are three common mistakes developers make when Base64 encoding in JavaScript:

Mistake 1: Using btoa() with non-ASCII input

const input = 'Hello, World!';
const base64Encoded = btoa(input); // incorrect

Corrected code:

const input = 'Hello, World!';
const encoder = new TextEncoder('utf-8');
const uint8Array = encoder.encode(input);
const base64Encoded = btoa(String.fromCharCode.apply(null, uint8Array));

Mistake 2: Not handling empty/null input

const input = '';
const base64Encoded = btoa(input); // error

Corrected code:

const input = '';
if (input) {
  const base64Encoded = btoa(input);
  console.log(base64Encoded);
} else {
  console.log('Input is empty or null');
}

Mistake 3: Not handling large input

const input = 'very large string...';
const base64Encoded = btoa(input); // error

Corrected code:

const input = 'very large string...';
const chunkSize = 1024;
const chunks = [];
for (let i = 0; i < input.length; i += chunkSize) {
  const chunk = input.slice(i, i + chunkSize);
  const base64Encoded = btoa(chunk);
  chunks.push(base64Encoded);
}
const finalBase64Encoded = chunks.join('');
console.log(finalBase64Encoded);

Performance Tips

Here are three practical performance tips for Base64 encoding in JavaScript:

Tip 1: Use TextEncoder API for non-ASCII input

Using the TextEncoder API can improve performance when working with non-ASCII input, as it allows for more efficient encoding and decoding.

Tip 2: Use Blob API for large input

Using the Blob API can improve performance when working with large input, as it allows for splitting the input into smaller chunks and processing each chunk separately.

Tip 3: Avoid using btoa() with large input

The btoa() function can be slow when working with large input, as it uses a simple algorithm that is not optimized for performance. Instead, use the TextEncoder API or Blob API to improve performance.

FAQ

Q: What is the difference between btoa() and atob()?

A: btoa() is used to encode a string to Base64, while atob() is used to decode a Base64 string.

Q: How do I handle non-ASCII input when using btoa()?

A: Use the TextEncoder API to convert the input string to a Uint8Array, and then use the btoa() function.

Q: How do I handle large input when using btoa()?

A: Use the Blob API to split the input string into smaller chunks, and then use the btoa() function.

Q: What is the performance impact of using btoa() with large input?

A: The btoa() function can be slow when working with large input, as it uses a simple algorithm that is not optimized for performance.

Q: Can I use btoa() with Unicode input?

A: No, the btoa() function assumes that the input string is a string of ASCII characters. Use the TextEncoder API to convert the input string to a Uint8Array, and then use the btoa() function.

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