Dlaczego tak nazwano Javascript `atob ()` i `btoa ()`?

266

W JavaScript window.atob()metoda dekoduje ciąg base64, a window.btoa()metoda koduje stringdo base64 .

Dlaczego więc nie nazwano ich jak base64Decode()i base64Encode()? atob()i btoa()nie mają sensu, ponieważ wcale nie są semantyczne.

Chcę poznać przyczynę.

Константин Ван
źródło
153
Lata mi zajęło uświadomienie sobie, że to „A do B”. Przez cały czas wymawiałem je jako „a-tob” i „b-toa”.
Ryan
5
@ Ryan Cieszę się, że to nie tylko ja!
TMH
1
Policz mnie. Myślałem tak samo :-)
Super Coder
3
Zabierz swoje ego z mojej nomenklatury.
AJB,
1
źle name, zwykle używają jasnych długich nazw, takich jak getElementById:addEventListener
cieunteung

Odpowiedzi:

164

atob()I btoa()metody pozwalają autorom przekształcić zawartości do iz kodowania base64.

W tych interfejsach API do celów mnemonicznych można uznać, że „b” oznacza „binarny”, a „a” oznacza „ASCII”. W praktyce jednak, głównie z przyczyn historycznych, zarówno wejście, jak i wyjście tych funkcji są łańcuchami Unicode.

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

shershen
źródło
82
Ale to zacofane. atob()konwertuje pliki binarne na ASCII i btoa()konwertuje ASCII na binarne.
2540625
52
ascii jest base64 i atobjest ascii na binarny. w pewnym sensie zostawili to z obu odpowiedzi. więc nie jest odwrócone
AKnox
13
Więc Stringjest Binary? I cały czas myślałem, że binarne to coś w rodzaju 0 i 1. To jest TAK WYGODNE!
Stefan Rein,
6
@StefanRein Zgadzam się z twoją opinią. window.btoaodczytaj jego argument jako dane binarne i podziel go na 6 kawałków, aby go zakodować; to prawda, więc nazewnictwo ma sens z punktu widzenia. Jednak również window.btoabierze jako argument tylko ciąg ! :(
Константин Ван
5
@ K._> „Jednak jako argument window.btoaprzyjmuje tylko ciąg znaków !” <To prawda, ale ciąg tutaj jest tylko reprezentacją danych. Na przykład, jeśli spróbujesz otworzyć obraz w notatniku, będzie on wyświetlany jako ciąg znaków, ale nadal będzie to dane binarne. btoaGłówną zaletą jest to, że nie ma znaczenia, w jakim formacie jest napis, lecz traktuje go jako binarny. Przypadkowe jest to, że w większości przypadków ten ciąg jest zwykłym ciągiem.
laggingreflex,
106

Podsumowując już udzielone odpowiedzi:

  • atob oznacza ASCII to binary
    • na przykład: atob("ZXhhbXBsZSELCg==") == "example!^K"
  • btoa oznacza binary to ASCII
    • na przykład: btoa("\x01\x02\xfe\xff") == "AQL+/w=="

Dlaczego SCII i b inary:

  • ASCII(the a) jest wynikiem base64kodowania. Bezpieczny tekst złożony tylko z podzbioru znaków ASCII (*), które mogą być właściwie reprezentowane i transportowany (np korpus E-mail jest)
  • binary( b) oznacza dowolny strumień zer i jedynek (w javascript musi być reprezentowany przez ciąg znaków).

(*) W base64nich między innymi: A-Z, a-z, 0-9, +, /i =(wyściółka, tylko na końcu) https://en.wikipedia.org/wiki/Base64

PS Muszę przyznać, że sam byłem początkowo zdezorientowany przez nazewnictwo i myślałem, że imiona zostały zamienione. Myślałam, że bstojak na b ase64 zakodowanym ciągiem” i adla a ciąg NY” : D.

derenio
źródło
7
Wydaje mi się, że w gruncie rzeczy właśnie udowodniłeś, że wszyscy mają rację: base64 jest podzbiorem ASCII, więc chociaż możesz argumentować, że dane wyjściowe btoasą nadal technicznie ASCII, nie ma uzasadnienia dla nazwy, atobktóra akceptuje tylko base64 jako dane wejściowe.
devios1
1
Pomaga myśleć i zapamiętywać „a” (ascii) jako wyjście base64 i „b” (binarnie) jako strumień 0 i 1, który jest ciągiem.
Talespin_Kit
86

Wiem, że to stare, ale ostatnio pojawiło się na Twitterze i pomyślałem, że podzielę się nim, ponieważ jest autorytatywny.

Mnie:

@BrendanEich wybrałeś te nazwiska?

Mu:

Stare nazwy uniksowe, trudno znaleźć strony podręcznika, ale patrz https://www.unix.com/man-page/minix/1/btoa/… . Nazwy przeniesione z Uniksa do bazy kodów Netscape. Odzwierciedlałem je w JS w pośpiechu w 1995 r. (Po dziesięciu dniach w maju, ale wkrótce).

W przypadku zerwania łącza Minix, oto treść strony 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).

Źródło: Brendan Eich, twórca JavaScript. https://twitter.com/BrendanEich/status/998618208725684224

William Hilton
źródło
5
To jest właściwa odpowiedź na pytanie OP.
Ivan Filho
6

W tej chwili nie mogę zlokalizować źródła, ale powszechnie wiadomo, że w tym przypadku b oznacza „binarny”, a a „ASCII”.

Dlatego funkcje są w rzeczywistości nazywane:

ASCII na Binary for atob()i Binarny na ASCII for btoa().

Uwaga: jest to implementacja przeglądarki i została pozostawiona do celów zgodności z poprzednimi wersjami. Na przykład w Node.js nie istnieją.

Samolubny
źródło
W węźle używasz Buffer.from("Hello World").toString('base64')&Buffer.from("SGVsbG8gV29ybGQ=", 'base64').toString('ascii')
Nanoo