Mengapa Javascript `atob ()` dan `btoa ()` diberi nama seperti itu?

266

Dalam Javascript, window.atob()metode menerjemahkan string base64 dan window.btoa()metode mengkode a stringke base64 .

Lalu mengapa mereka tidak diberi nama seperti base64Decode()dan base64Encode()? atob()dan btoa()tidak masuk akal karena mereka tidak semantik sama sekali.

Saya ingin tahu alasannya.

Константин Ван
sumber
153
Butuh waktu bertahun-tahun untuk menyadari itu "A to B". Saya telah mengucapkan mereka "a-tob" dan "b-toa" sepanjang waktu itu.
Ryan
5
@Ryan Saya senang bukan hanya saya!
TMH
1
Hitung saya. Saya pikir hal yang sama :-)
Super Coder
3
Lepaskan ego Anda dari nomenklatur saya.
AJB
1
buruk name, biasanya mereka menggunakan nama panjang yang jelas seperti getElementById,addEventListener
cieunteung

Jawaban:

164

Metode atob()dan btoa()memungkinkan penulis untuk mengubah konten ke dan dari pengkodean base64.

Dalam API ini, untuk tujuan mnemonik, huruf "b" dapat dianggap sebagai singkatan dari "biner", dan "a" untuk "ASCII". Namun dalam praktiknya, terutama karena alasan historis, baik input maupun output dari fungsi-fungsi ini adalah string Unicode.

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

Shershen
sumber
82
Tapi ini terbelakang. atob()mengkonversi biner ke ASCII, dan btoa()mengubah ASCII menjadi biner.
2540625
52
ascii adalah base64, dan atobascii ke biner. mereka agak meninggalkan ini dari kedua jawaban. jadi tidak terbalik
AKnox
13
Jadi Stringadalah Binary?! Dan saya pikir sepanjang waktu, biner adalah sesuatu seperti 0 dan 1. Ini SANGAT BINGUNG!
Stefan Rein
6
@StefanRein Saya setuju dengan pendapat Anda. window.btoamembaca argumennya sebagai data biner dan membaginya menjadi 6 bit untuk menyandikannya; itu benar, jadi penamaan itu masuk akal dalam sudut pandang. Namun, juga, window.btoahanya menggunakan string sebagai argumennya! :(
Константин Ван
5
@ K._> "Namun, juga, window.btoahanya menggunakan string sebagai argumennya!" <Itu benar tapi string di sini hanya representasi data. Seperti jika Anda mencoba untuk membuka gambar di notepad itu akan ditampilkan sebagai string tetapi masih berupa data biner. btoaKeuntungan utama adalah bahwa tidak peduli apa format string, itu hanya memperlakukannya sebagai biner. Ini hanya kebetulan bahwa dalam kebanyakan kasus string terjadi menjadi string biasa.
laggingreflex
106

Untuk meringkas jawaban yang sudah diberikan:

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

Mengapa A SCII dan b notaris:

  • ASCII(the a) adalah hasil dari base64encoding. Sebuah aman teks hanya terdiri dari subset dari karakter ascii (*) yang dapat benar terwakili dan diangkut (tubuh misalnya email ini),
  • binary(the b) adalah sembarang aliran 0s dan 1s (dalam javascript itu harus diwakili dengan tipe string).

(*) Di base64ini terbatas pada: A-Z, a-z, 0-9, +, /dan =(padding, hanya di akhir) https://en.wikipedia.org/wiki/Base64

PS Saya harus mengakui bahwa saya sendiri pada awalnya bingung dengan penamaan dan berpikir nama-nama itu ditukar. Saya pikir bsingkatan dari " b ase64 encoded string" dan auntuk " a ny string" : D.

derenio
sumber
7
Saya pikir Anda pada dasarnya hanya membuktikan poin semua orang: base64 adalah subset dari ASCII, karena itu sementara Anda mungkin berpendapat bahwa output btoamasih secara teknis ASCII, tidak ada pembenaran untuk nama atobyang hanya menerima base64 sebagai input.
devios1
1
Ini membantu untuk berpikir dan mengingat 'a' (ascii) sebagai output base64 dan 'b' (biner) sebagai aliran 0 dan 1 yang merupakan string.
Talespin_Kit
86

Saya tahu ini sudah tua, tetapi baru-baru ini muncul di Twitter, dan saya pikir saya akan membagikannya karena ini resmi.

Saya:

@ BrendanEich apakah Anda memilih nama-nama itu?

Dia:

Nama Unix lama, sulit ditemukan halaman manual tetapi lihat https://www.unix.com/man-page/minix/1/btoa/… . Nama-nama dibawa dari Unix ke dalam basis kode Netscape. Saya merefleksikannya ke dalam JS dengan tergesa-gesa pada tahun 1995 (setelah sepuluh hari di bulan Mei tetapi segera).

Jika tautan Minix rusak, inilah konten halaman 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).

Sumber: Brendan Eich, pencipta JavaScript. https://twitter.com/BrendanEich/status/998618208725684224

William Hilton
sumber
5
Nah, ini adalah jawaban aktual untuk pertanyaan OP.
Ivan Filho
6

Saya tidak dapat menemukan sumber saat ini, tetapi sudah menjadi rahasia umum bahwa dalam kasus ini, b adalah singkatan dari 'binary', dan a untuk 'ASCII'.

Oleh karena itu, fungsinya sebenarnya dinamai:

ASCII ke Biner untuk atob(), dan Biner ke ASCII untuk btoa().

Catatan ini adalah implementasi browser, dan dibiarkan untuk tujuan legacy / kompatibilitas mundur. Dalam Node.js misalnya, ini tidak ada.

Egois
sumber
Di Node Anda menggunakan Buffer.from("Hello World").toString('base64')&Buffer.from("SGVsbG8gV29ybGQ=", 'base64').toString('ascii')
Nanoo