Чому так назвали Javascript `atob ()` та `btoa ()`?


266

У Javascript window.atob()метод декодує рядок base64, а window.btoa()метод кодує a stringв base64 .

Тоді чому їх не назвали так base64Decode()і base64Encode()? atob()і btoa()не має сенсу, оскільки вони зовсім не семантичні.

Я хочу знати причину.


153
Мені знадобилися роки, щоб зрозуміти, що це "А до В". Я весь цей час вимовляв їх "a-tob" і "b-toa".
Райан

5
@Ryan Я радий, що це було не тільки я!
ТМХ

1
Порахуйте мене. Я подумав те саме :-)
Супер Кодер,

3
Зніміть своє его з моєї номенклатури.
AJB

1
погано name, зазвичай вони використовують чітке довге ім'я, наприклад getElementById,addEventListener
cieunteung

Відповіді:


164

atob()І btoa()методи дозволяють авторам перетворити вміст в і з кодування base64.

У цих API для мнемонічних цілей "b" може вважатися таким, що позначається як "бінарний", а "a" - для "ASCII". На практиці, однак, в основному з історичних причин, і введення, і вихід цих функцій є рядками Unicode.

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


82
Але це відстале. atob()перетворює бінарне в ASCII і btoa()перетворює ASCII у бінарне.
2540625

52
ascii є base64, і atobє ascii до двійкового. вони неначе залишили це з обох відповідей. так що це не відмінено
AKnox

13
Так Stringє Binary?! І я весь час думав, що бінарне було чимось на зразок 0 і 1. Це ТАК ДУМКО!
Стефан Рейн

6
@StefanRein Я згоден з вашою думкою. window.btoaпрочитайте його аргумент як бінарні дані та розділіть його на 6 біт фрагментів, щоб кодувати його; це правда, тому називання має сенс з точки зору. Однак також window.btoaбере лише рядок як аргумент! :(
Константин Ван

5
@ K._> "Тим не менш, також window.btoaбере лише рядок як аргумент!" <Це правда, але рядок тут є лише поданням даних. Як якщо ви спробуєте відкрити зображення в блокноті, воно відображатиметься як рядок, але це все ще двійкові дані. btoaОсновна перевага полягає в тому, що йому не важливо, в якому форматі знаходиться рядок, вона просто трактується як бінарний. Лише випадково, що в більшості випадків цей рядок буває звичайним рядком.
laggingreflex

106

Підсумовуючи вже дані відповіді:

  • atob виступає за ASCII to binary
    • наприклад: atob("ZXhhbXBsZSELCg==") == "example!^K"
  • btoa виступає за binary to ASCII
    • наприклад: btoa("\x01\x02\xfe\xff") == "AQL+/w=="

Чому SCII і б Інарі:

  • ASCII(the a) - результат base64кодування. Безпечний текст складається тільки з підмножини символів ASCII (*) , які можуть бути правильно представлені , і переміщуються (наприклад , електронною поштою тіло в),
  • binary(the b) - це будь-який потік 0s і 1s (у javascript він повинен бути представлений рядковим типом).

(*) У base64них обмежені: A-Z, a-z, 0-9, +, /і =(оббивка, тільки в кінці) https://en.wikipedia.org/wiki/Base64

PS Я мушу визнати, що я сам спочатку плутався у назвах і думав, що імена замінені. Я думав , що bстенд для « б ase64 закодованої рядка» і aдля « в рядку пу» : D.


7
Я думаю, що ви в основному просто довели свою думку: base64 - це підмножина ASCII, тому, хоча ви можете стверджувати, що вихід btoaтехнічно ASCII все ще є технічним, немає виправдання для імені, atobяке приймає лише base64 як вхідний.
devios1

1
Це допомагає думати і запам’ятовувати 'a' (ascii) як вихідний результат base64 і 'b' (двійковий) як потік 0 і 1, який є рядком.
Talespin_Kit

86

Я знаю, що це старе, але нещодавно воно з’явилося у Twitter, і я думав, що поділюсь ним, оскільки він є авторитетним.

Я:

@BrendanEich ти вибрав ці імена?

Йому:

Старі імена Unix, важко знайти чоловічі сторінки rn, але дивіться https://www.unix.com/man-page/minix/1/btoa/… . Імена, що переносяться з Unix в базу коду Netscape. Я відобразив їх у JS дуже поспіхом у 1995 році (після десяти днів у травні, але незабаром).

Якщо посилання Minix розірветься, ось вміст чоловічої сторінки:

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

Джерело: Брендан Ейх, творець JavaScript. https://twitter.com/BrendanEich/status/998618208725684224


5
Ну, це фактична відповідь на питання ОП.
Іван Фільо

6

На даний момент я не можу знайти джерело, але загальновідомо, що в цьому випадку b означає "бінарний", а "ASCII".

Тому функції фактично названі:

ASCII для Binary для atob(), а Binary для ASCII для btoa().

Зауважте, що це реалізація браузера, і він був залишений для спадкової / зворотної сумісності. Наприклад, у Node.js таких не існує.


У Node ви використовуєте Buffer.from("Hello World").toString('base64')&Buffer.from("SGVsbG8gV29ybGQ=", 'base64').toString('ascii')
Nanoo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.