Hvorfor ble Javascript `atob()` og `btoa()` kalt det?


I Javascript dekoder window.atob()-metoden en base64-streng, og window.btoa()-metoden koder en streng til base64.

Hvorfor ble de da ikke kalt noe som base64Decode() og base64Encode()? atob() og btoa() gir ingen mening fordi de ikke er semantiske i det hele tatt.

Jeg vil vite grunnen.

Svar #1

Jeg spurte Brendan Eich (skaperen av JavaScript) om han valgte de navnene på Twitter, og han svarte:

Gamle Unix-navn, vanskelig å finne man-sider akkurat nå, men se https://www.unix.com/man-page/minix/1/btoa/ …. Navnene ble overført fra Unix til Netscape-kodebasen. Jeg reflekterte dem inn i JS i stor hast i 1995 (etter de ti dagene i mai, men snart).

Hvis Minix-lenken skulle bryte, her er innholdet fra man-siden:

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

Svar #2

Metodene atob() og btoa() gjør det mulig for forfattere å transformere innhold til og fra base64-kodingen.

I disse API-ene kan bokstaven "b" for mnemoniske formål anses å stå for "binary", og "a" for "ASCII". I praksis, derimot, av hovedsakelig historiske årsaker, er både inngangen og utgangen til disse funksjonene Unicode-strenger.

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

Svar #3

For å oppsummere de allerede gitte svarene:

  • atob står for ASCII til binær

    • f.eks.: atob("ZXhhbXBsZSELCg==") == "example!^K"
  • btoa står for binary to ASCII

    • f.eks.: btoa("\x01\x02\xfe\xff") == "AQL+/w=="

Hvorfor ASCII og binær:

  • ASCII (bokstaven a) er resultatet av base64-koding. En trygg tekst som kun består av et delsett av ASCII-tegn(*) som kan representeres og transporteres korrekt (f.eks. e-postens innhold),
  • binær (bokstaven b) er enhver strøm av 0er og 1ere (i javascript må den representeres med en strengtype).

(*) i base64 er disse begrenset til: A-Z, a-z, 0-9, +, / og = (utfylling, bare på slutten) https://en.wikipedia.org/wiki/Base64

P.S. Jeg må innrømme at jeg selv først ble forvirret av navngivingen og trodde navnene var byttet om. Jeg trodde at b stod for "base64-kodet streng" og a for "all streng" :D.

Svar #4

Navnene kommer fra en Unix-funksjon med lignende funksjonalitet, men det kan du allerede lese i andre svar her.


Her er mitt mnemonikk for å huske hvilken man skal bruke. Dette svarer egentlig ikke på selve spørsmålet, men kan hjelpe folk med å finne ut hvilken av funksjonene de skal bruke uten å måtte ha en fane med dette spørsmålet på Stack Overflow åpen hele dagen.

Vakkert til Forferdelig btoa

Ta noe vakkert (aka, vakkert innhold som gir mening for applikasjonen din: json, xml, tekst, binære data) og gjør det om til noe forferdelig, som ikke kan forstås som det er (aka: kodet).

Forferdelig til vakker atob

Det eksakte motsatt av btoa

Merk

Noen kan si at binær ikke er vakkert, men hei, dette er bare et triks for å hjelpe deg.

Svar #5

Jeg kan ikke finne en kilde akkurat nå, men det er allment kjent at i dette tilfellet står b for 'binary', og a for 'ASCII'.

Derfor heter funksjonene faktisk:

ASCII til binær for atob(), og binær til ASCII for btoa().

Merk også at dette er en nettleserimplementering og ble etterlatt for legacy/bakoverkompatibilitetsformål. I Node.js vil du bruke:

Buffer.from("Hello World").toString('base64')
Buffer.from("SGVsbG8gV29ybGQ=", 'base64').toString('ascii')

Relaterte artikler