How to Decode a Base64-Encoded String in Node.js?

Similar to encoding a base64 string, the easiest way to decode a base64-encoded string in Node.js is to use the built-in Buffer object. For example, you can achieve this in the following way:

// 1: define the string to be decoded
const encodedStr = 'Zm9vYmFy';

// 2: convert encoded string to buffer
const binaryStrBuffer = Buffer.from(encodedStr, 'base64');

// 3: convert buffer to string
const decoded = binaryStrBuffer.toString('ascii');

console.log(decoded); // 'foobar'

Although encoding to an "ascii" string is fast, it is limited to working only with strings that are encoded with single-byte binary data, which means that it may not be suitable for decoding multibyte base64-encoded strings.

For example, consider the following multibyte base64-encoded string that represents a fox emoji (🦊), but incorrectly outputs "p&" with "ascii" string encoding:

const binaryStrBuffer = Buffer.from('8J+mig==', 'base64');
const decoded = binaryStrBuffer.toString('ascii'));

console.log(decoded); // 'p&'

Therefore, to properly decode strings that are encoded with multibyte binary data, you should use the "utf8" encoding method with the Buffer.toString() method, for example, like so:

const fromBase64 = (str) => Buffer.from(str, 'base64').toString('utf8');

console.log(fromBase64('8J+mig==')); // '🦊'
console.log(fromBase64('44GT44KT44Gr44Gh44Gv')); // 'こんにちは'
console.log(fromBase64('Zm9vYmFy')); // 'foobar'

This post was published by Daniyal Hamid. Daniyal currently works as the Head of Engineering in Germany and has 20+ years of experience in software engineering, design and marketing. Please show your love and support by sharing this post.