Then why weren’t they named like base64Decode() and base64Encode()?
atob() and btoa() don’t make sense because they’re not semantic at all.
I want to know the reason.
btoa() methods allow authors to transform content to and from the base64 encoding.
In these APIs, for mnemonic purposes, the “b” can be considered to
stand for “binary”, and the “a” for “ASCII”. In practice, though, for
primarily historical reasons, both the input and output of these
functions are Unicode strings.
To sum up the already given answers:
ASCII to binary
atob("ZXhhbXBsZSELCg==") == "example!^K"
binary to ASCII
btoa("\x01\x02\xfe\xff") == "AQL+/w=="
Why ASCII and binary:
a) is the result of
base64encoding. A safe text composed only of a subset of ascii characters(*) that can be correctly represented and transported (e.g. email’s body),
base64 these are limited to:
= (padding, only at the end) https://en.wikipedia.org/wiki/Base64
P.S. I must admit I myself was initially confused by the naming and thought the names were swapped. I thought that
b stand for “base64 encoded string” and
a for “any string” :D.
I know this is old, but it recently came up on Twitter, and I thought I’d share it as it is authoritative.
@BrendanEich did you pick those names?
Old Unix names, hard to find man pages rn but see
https://www.unix.com/man-page/minix/1/btoa/ …. The names carried over
from Unix into the Netscape codebase. I reflected them into JS in a
big hurry in 1995 (after the ten days in May but soon).
In case the Minix link breaks, here’s the man page content:
BTOA(1) BTOA(1) NAME btoa - binary to ascii conversion SYNOPSIS btoa [-adhor] [infile] [outfile] OPTIONS -a Decode, rather than encode, the file -d Extracts repair file from diagnosis file -h Help menu is displayed giving the options -o The obsolete algorithm is used for backward compatibility -r Repair a damaged file EXAMPLES btoa <a.out >a.btoa # Convert a.out to ASCII btoa -a <a.btoa >a.out # Reverse the above DESCRIPTION Btoa is a filter that converts a binary file to ascii for transmission over a telephone line. If two file names are provided, the first in used for input and the second for out- put. If only one is provided, it is used as the input file. The program is a function- ally similar alternative to uue/uud, but the encoding is completely different. Since both of these are widely used, both have been provided with MINIX. The file is expanded about 25 percent in the process. SEE ALSO uue(1), uud(1).
I can’t locate a source at the moment, but it is common knowledge that in this case, the b stands for ‘binary’, and the a for ‘ASCII’.
Therefore, the functions are actually named:
ASCII to Binary for
Binary to ASCII for
Note this is browser implementation, and was left for legacy / backwards-compatibility purposes. In Node.js for example, these don’t exist.