Por que o Javascript `atob ()` e `btoa ()` foram nomeados assim?

266

Em Javascript, o window.atob()método decodifica uma string base64 e o window.btoa()método codifica a stringem base64 .

Então, por que eles não foram nomeados como base64Decode()e base64Encode()? atob()e btoa()não faz sentido, porque eles não são semânticos.

Eu quero saber o motivo.

Константин Ван
fonte
153
Levei anos para perceber que era "A a B". Eu os pronunciava "a-tob" e "b-toa" o tempo todo.
Ryan
5
@ Ryan Estou feliz que não era só eu!
TMH 21/01
1
Conte comigo. Pensei o mesmo :-)
Super Coder
3
Tire seu ego da minha nomenclatura.
AJB
1
mau name, geralmente eles usam nome longo claro como getElementById,addEventListener
cieunteung

Respostas:

164

Os métodos atob()e btoa()permitem que os autores transformem o conteúdo de e para a codificação base64.

Nessas APIs, para fins mnemônicos, o "b" pode ser considerado "binário" e o "a" para "ASCII". Na prática, porém, por razões principalmente históricas, tanto a entrada quanto a saída dessas funções são seqüências Unicode.

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

shershen
fonte
82
Mas é para trás. atob()converte binário em ASCII e btoa()converte ASCII em binário.
2540625
52
ascii é base64 e atobé ascii para binário. eles meio que deixaram isso de fora das duas respostas. por isso não é revertido
AKnox
13
Então o Stringé Binary?! E eu pensei o tempo todo, binário era algo como 0 e 1. Isso é TÃO CONFUSO!
27513 Stefan Rein #
6
@StefanRein Concordo com a sua opinião. window.btoaleia seu argumento como dados binários e divida-o em 6 bits de pedaços para codificá-lo; é verdade, então a nomeação faz sentido do ponto de vista. No entanto, também window.btoaleva apenas uma string como argumento! :(
Última atualização:
5
@ K._> "No entanto, também window.btoaleva apenas uma string como argumento!" <Isso é verdade, mas a string aqui é apenas uma representação dos dados. Por exemplo, se você tentar abrir uma imagem em um bloco de notas, ela será exibida como uma string, mas ainda serão dados binários. btoaA principal vantagem é que ele não se importa com o formato da string, apenas a trata como binária. É apenas acidental que, na maioria dos casos, essa string seja regular.
laggingreflex
106

Para resumir as respostas já fornecidas:

  • atob apoia ASCII to binary
    • por exemplo: atob("ZXhhbXBsZSELCg==") == "example!^K"
  • btoa apoia binary to ASCII
    • por exemplo: btoa("\x01\x02\xfe\xff") == "AQL+/w=="

Por que A SCII e b inário :

  • ASCII(the a) é o resultado da base64codificação. Um texto seguro composto apenas por um subconjunto de caracteres ascii (*) que pode ser corretamente representado e transportado (por exemplo, o corpo do email),
  • binary(the b) é qualquer fluxo de 0s e 1s (em javascript, ele deve ser representado com um tipo de string).

(*) Na base64estes estão limitados a: A-Z, a-z, 0-9, +, /e =(estofamento, apenas no final) https://en.wikipedia.org/wiki/Base64

PS Devo admitir que eu mesmo fiquei inicialmente confuso com o nome e pensei que os nomes foram trocados. Pensei que bsuporte para " b ase64 string codificada" e apara " uma corda ny" : D.

derenio
fonte
7
Eu acho que você basicamente acabou de provar o ponto de todos: base64 é um subconjunto de ASCII, portanto, embora você possa argumentar que a saída de btoaainda é tecnicamente ASCII, não justificativa para o nome atobque aceita apenas base64 como entrada.
Devios1
1
Ajuda pensar e lembrar 'a' (ascii) como saída base64 e 'b' (binário) como fluxo de 0 e 1, que é uma string.
Talespin_Kit
86

Eu sei que isso é antigo, mas foi lançado recentemente no Twitter, e pensei em compartilhá-lo por ser autoritário.

Eu:

@BrendanEich você escolheu esses nomes?

Ele:

Nomes antigos do Unix, difíceis de encontrar nas páginas de manual rn, mas consulte https://www.unix.com/man-page/minix/1/btoa/… . Os nomes transferidos do Unix para a base de código do Netscape. Eu os refleti em JS com muita pressa em 1995 (após os dez dias de maio, mas em breve).

Caso o link do Minix se quebre, aqui está o conteúdo da página de manual:

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

Fonte: Brendan Eich, o criador do JavaScript. https://twitter.com/BrendanEich/status/998618208725684224

William Hilton
fonte
5
Bem, esta é a resposta real à pergunta do OP.
Ivan Filho
6

Não consigo localizar uma fonte no momento, mas é do conhecimento geral que, nesse caso, o b significa 'binário' e o a como 'ASCII'.

Portanto, as funções são realmente nomeadas:

ASCII para Binário para atob()e Binário para ASCII para btoa().

Observe que esta é a implementação do navegador e foi deixada para fins de compatibilidade herdada / anterior. No Node.js, por exemplo, eles não existem.

Egoísta
fonte
No Node você usa Buffer.from("Hello World").toString('base64')&Buffer.from("SGVsbG8gV29ybGQ=", 'base64').toString('ascii')
Nanoo