2015-11-22 8 views
92

In Javascript, window.atob() il metodo decodifica una stringa base64 e il metodo window.btoa() codifica una stringa come base64.Perchè javascript `atob()` e `btoa()` hanno chiamato così?

Allora perché non si chiamavano come base64Decode() e base64Encode()? atob() e btoa() non hanno senso perché non sono semantici.

Voglio sapere il motivo.

+35

Mi ci sono voluti anni per capire che era "dalla A alla B". Li stavo pronunciando "a-tob" e "b-toa" per tutto quel tempo. – Ryan

+0

@Ryan Sono contento che non fosse solo io! –

+0

Contattami. Ho pensato la stessa cosa :-) –

risposta

62

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

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

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

+1

Questo e seguendo la tradizione C come 'atoi()' ecc. – Roope

+29

Ma è indietro. 'atob()' converte binario in ASCII, e 'btoa()' converte ASCII in binario. – jtheletter

+10

ascii è base64 e 'atob' è ascii al binario. hanno lasciato questo fuori da entrambe le risposte. quindi non è invertito – AKnox

4

non riesco a individuare una fonte al momento, ma è risaputo che in questo caso, il b sta per 'binario', e l'un per 'ASCII'.

Pertanto, le funzioni sono in realtà il nome:

ASCII a binario per atob(), e binario a ASCII per btoa().

Nota: questa è l'implementazione del browser ed è stata lasciata per scopi di compatibilità legacy/retrocompatibile. Ad esempio, in Node.js questi non esistono.

31

Riassumendo le risposte già date:

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

Perché A SCII e b fabbrica di alcune componenti:

  • ASCII (la a) è il prodotto di base64 codifica. A safe testo composto solo da un sottoinsieme di caratteri ascii (*) che può essere rappresentato e trasportato correttamente (ad es.Il corpo di posta elettronica),
  • binary (la b) è un qualsiasi flusso di 0s e 1s (in JavaScript deve essere rappresentato con un tipo stringa).

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

P.S. Devo ammettere che io stesso inizialmente ero confuso dal nome e pensavo che i nomi fossero scambiati. Ho pensato che b riposare per "stringa codificatabase64" e a per "un stringa di ny": D.

Problemi correlati