Perché Javascript `atob ()` e `btoa ()` si chiamavano così?


266

In Javascript, il window.atob()metodo decodifica una stringa base64 e il window.btoa()metodo codifica a stringin base64 .

Allora perché non sono stati chiamati come base64Decode()e base64Encode()? atob()e btoa()non ha senso perché non sono affatto semantici.

Voglio sapere il motivo.


153
Mi ci sono voluti anni per capire che era "dalla A alla B". Li avevo pronunciati "a-tob" e "b-toa" per tutto quel tempo.
Ryan,

5
@Ryan Sono contento che non sono stato solo io!
TMH,

1
Contami dentro. Pensavo lo stesso :-)
Super Coder,

3
Allontana il tuo ego dalla mia nomenclatura.
AJB l'

1
male name, di solito usano un lungo nome chiaro come getElementById,addEventListener
cieunteung

Risposte:


164

I metodi atob()e btoa()consentono agli autori di trasformare il contenuto da e verso la codifica base64.

In queste API, per scopi mnemonici, la "b" può essere considerata come "binaria" e la "a" per "ASCII". In pratica, tuttavia, per ragioni principalmente storiche, sia l'input che l'output di queste funzioni sono stringhe Unicode.

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


82
Ma è arretrato. atob()converte binario in ASCII e btoa()converte ASCII in binario.
2540625,

52
ascii è base64 ed atobè ascii in binario. hanno lasciato questo fuori da entrambe le risposte. quindi non è invertito
AKnox il

13
Quindi Stringè Binary?! E ho pensato tutto il tempo, binario era qualcosa come 0 e 1. Questo è COSÌ CONFUSIVO!
Stefan Rein,

6
@StefanRein Sono d'accordo con la tua opinione. window.btoaleggere il suo argomento come dati binari e dividerlo in 6 bit di blocchi per codificarlo; è vero, quindi la denominazione ha un senso dal punto di vista. Tuttavia, anche, window.btoaprende solo una stringa come argomento! :(
Константин Ван

5
@ K._> "Tuttavia, anche, window.btoaaccetta solo una stringa come argomento!" <È vero, ma la stringa qui è solo una rappresentazione dei dati. Come se provi ad aprire un'immagine in un blocco note, verrà visualizzata come una stringa ma sono comunque dati binari. btoaIl vantaggio principale è che non gli importa in quale formato sia la stringa, la tratta semplicemente come binaria. È solo casuale che nella maggior parte dei casi quella stringa sembra essere una stringa normale.
laggingreflex,

106

Per riassumere le risposte già fornite:

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

Perché A SCII e b inary :

  • ASCII(il a) è il risultato della base64codifica. Un testo sicuro composto solo da un sottoinsieme di caratteri ASCII (*) che possono essere correttamente rappresentati e trasportati (ad esempio il corpo dell'email),
  • binary(the b) è un flusso qualsiasi di 0s e 1s (in javascript deve essere rappresentato con un tipo di stringa).

(*) In base64questi sono limitati a: A-Z, a-z, 0-9, +, /e =(padding, solo alla fine) https://en.wikipedia.org/wiki/Base64

PS Devo ammettere che inizialmente ero confuso dalla denominazione e pensavo che i nomi fossero stati scambiati. Ho pensato che bil basamento per la " b ase64 stringa codificata" e aper " una stringa di ny" : D.


7
Penso che fondamentalmente hai appena dimostrato il punto di tutti: base64 è un sottoinsieme di ASCII, quindi mentre potresti argomentare che l'output di btoaè ancora tecnicamente ASCII, non c'è giustificazione per il nome atobche accetta solo base64 come input.
devios1

1
Aiuta a pensare e ricordare 'a' (ascii) come output base64 e 'b' (binario) come flusso di 0 e 1 che è stringa.
Talespin_Kit

86

So che questo è vecchio, ma recentemente è apparso su Twitter e ho pensato di condividerlo perché è autorevole.

Me:

@Brendan: hai scelto quei nomi?

lui:

Vecchi nomi Unix, pagine man difficili da trovare ma vedi https://www.unix.com/man-page/minix/1/btoa/… . I nomi riportati da Unix nella base di codice di Netscape. Li ho riflessi in JS in grande fretta nel 1995 (dopo i dieci giorni di maggio ma presto).

In caso di interruzione del collegamento Minix, ecco il contenuto della pagina man:

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, il creatore di JavaScript. https://twitter.com/BrendanEich/status/998618208725684224


5
Bene, questa è la vera risposta alla domanda di OP.
Ivan Filho,

6

Al momento non riesco a individuare una fonte, ma è risaputo che in questo caso, b sta per "binario" e a per "ASCII".

Pertanto, le funzioni sono effettivamente denominate:

ASCII in binario per atob()e binario in ASCII per btoa().

Si noti che questa è l'implementazione del browser ed è stata lasciata per motivi di legacy / retrocompatibilità. In Node.js per esempio, questi non esistono.


In Node usi Buffer.from("Hello World").toString('base64')&Buffer.from("SGVsbG8gV29ybGQ=", 'base64').toString('ascii')
Nanoo l'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.