Why were Javascript `atob()` and `btoa()` named like that?

Javascript

Javascript Problem Overview


In Javascript, window.atob() method decodes a base64 string and window.btoa() method encodes a string into base64.

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.

Javascript Solutions


Solution 1 - Javascript

The atob() and 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.

From : http://www.w3.org/TR/html/webappapis.html#atob

Solution 2 - Javascript

I know this is old, but it recently came up on Twitter, and I thought I'd share it as it is authoritative.

Me: > @BrendanEich did you pick those names?

Him:

> 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).

Source: Brendan Eich, the creator of JavaScript. https://twitter.com/BrendanEich/status/998618208725684224

Solution 3 - Javascript

To sum up the already given answers:

  • atob stands for ASCII to binary
    • e.g.: atob("ZXhhbXBsZSELCg==") == "example!^K"
  • btoa stands for binary to ASCII
    • e.g.: btoa("\x01\x02\xfe\xff") == "AQL+/w=="

Why ASCII and binary:

  • ASCII (the a) is the result of base64 encoding. A safe text composed only of a subset of ascii characters(*) that can be correctly represented and transported (e.g. email's body),
  • binary (the b) is any stream of 0s and 1s (in javascript it must be represented with a string type).

(*) in base64 these are limited to: A-Z, a-z, 0-9, +, / and = (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.

Solution 4 - Javascript

The names come from a unix function with similar functionality, but you can already read that in other answers here.


Here is my mnemonic to remember which one to use. This doesn't really answer the question itself, but might help people figure which one of the functions to use without keeping a tab open on this question on stack overflow all day long.

Beautiful to Awful btoa

Take something Beautiful (aka, beautiful content that would make sense to your application: json, xml, text, binary data) and transform it to something Awful, that cannot be understood as is (aka: encoded).

Awful to Beautiful atob

The exact opposite of btoa

Note

Some may say that binary is not beautiful, but hey, this is only a trick to help you.

Solution 5 - Javascript

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 atob(), and Binary to ASCII for btoa().

Note this is browser implementation, and was left for legacy / backwards-compatibility purposes. In Node.js for example, these don't exist.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionКонстантин ВанView Question on Stackoverflow
Solution 1 - JavascriptshershenView Answer on Stackoverflow
Solution 2 - JavascriptWilliam HiltonView Answer on Stackoverflow
Solution 3 - JavascriptderenioView Answer on Stackoverflow
Solution 4 - JavascriptLunfelView Answer on Stackoverflow
Solution 5 - JavascriptSelfishView Answer on Stackoverflow