Почему Javascript `atob ()` и `btoa ()` названы так?

266

В Javascript window.atob()метод декодирует строку base64, а window.btoa()метод кодирует stringв base64 .

Тогда почему они не были названы как base64Decode()и base64Encode()? atob()и btoa()не имеет смысла, потому что они не семантические вообще.

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

Константин Ван
источник
153
Мне потребовались годы, чтобы понять, что это «от А до Б». Я произносил их "a-tob" и "b-toa" все это время.
Райан
5
@ Райан Я рад, что это был не только я!
TMH
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=="

Почему A SCII и B inary:

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

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

PS Я должен признать, что сам изначально был озадачен именами и думал, что имена поменялись местами. Я думал , что bстенд для « б ase64 закодированной строки» и aдля « в строке пу» : D.

derenio
источник
7
Я думаю, что вы в основном только что подтвердили точку зрения каждого: base64 является подмножеством ASCII, поэтому, хотя вы можете утверждать, что выходные данные btoaвсе еще технически ASCII, нет оправдания для имени, atobкоторое принимает только base64 в качестве входных данных.
devios1
1
Это помогает думать и запоминать «a» (ascii) как вывод base64 и «b» (двоичный) как поток 0 и 1, который является строкой.
Talespin_Kit
86

Я знаю, что это старо, но недавно оно появилось в Твиттере, и я решил поделиться им, потому что оно авторитетно.

Меня:

@BrendanEich ты выбрал эти имена?

Ему:

Старые имена Unix, трудно найти man-страницы, но смотрите 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 означает «двоичный», а a - «ASCII».

Следовательно, функции на самом деле называются:

ASCII для двоичного для atob()и двоичный для ASCII для btoa().

Обратите внимание, что это реализация браузера, и она была оставлена ​​для устаревшей / обратной совместимости. Например, в Node.js их не существует.

эгоистичный
источник
В Node вы используете Buffer.from("Hello World").toString('base64')&Buffer.from("SGVsbG8gV29ybGQ=", 'base64').toString('ascii')
Nanoo