为什么Javascript`atob()`和`btoa()`这样命名?


266

在Javascript中,window.atob()method解码base64字符串,然后window.btoa()将a编码stringbase64

那么,为什么没有他们命名为喜欢的base64Decode()base64Encode()atob()并且btoa()没有任何意义,因为它们根本不是语义的。

我想知道原因。


153
花了我多年的时间才意识到这是“ A to B”。我一直都在向他们宣读“ a-tob”和“ b-toa”。
Ryan

5
@Ryan我很高兴不仅仅是我!
TMH

1
算我。我也这么认为:-)
超级编码器

3
让我自命不凡。
AJB

1
不好name,平时他们用清长的名字一样getElementByIdaddEventListener
cieunteung

Answers:


164

atob()btoa()方法允许作者进行改造的内容,并从base64编码。

在这些API中,出于记忆的目的,可以将“ b”视为“二进制”,将“ a”视为“ ASCII”。但是实际上,由于主要的历史原因,这些函数的输入和输出都是Unicode字符串。

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


82
但这是落后的。atob()将二进制转换为ASCII,btoa()并将ASCII转换为二进制。
2540625 '16

52
ascii是base64,并且atob是二进制的ascii。他们有点忽略了这两个答案。因此它不会逆转
AKnox

13
所以StringBinary?!而且我一直都以为,二进制的值大约是0和1。
Stefan Rein

6
@StefanRein我同意您的意见。window.btoa将其参数读取为二进制数据,并将其拆分为6位块以对其进行编码;的确如此,因此从某种角度来说命名是有意义的。但是,也window.btoa只能将字符串作为参数!:(
–КонстантинВан16年

5
@ K._>“但是,也window.btoa只将字符串作为参数!” <是的,但是这里的字符串仅代表数据。就像您尝试在记事本中打开图像一样,它会显示为字符串,但仍然是二进制数据。btoa的主要优点是它并不关心字符串的格式,它只是将其视为二进制。在大多数情况下,该字符串碰巧是常规字符串,这只是偶然。
laggingreflex '16

106

总结已经给出的答案:

  • atob 代表 ASCII to binary
    • 例如: atob("ZXhhbXBsZSELCg==") == "example!^K"
  • btoa 代表 binary to ASCII
    • 例如: btoa("\x01\x02\xfe\xff") == "AQL+/w=="

为什么一个 SCII和b inary:

  • ASCIIa)是base64编码的结果。仅由可以正确表示和传输的ascii字符(*)子集组成的安全文本(例如电子邮件的正文),
  • binaryb)是01的任何流(在javascript中,它必须以字符串类型表示)。

(*)在base64这些被限制为:A-Za-z0-9+/=(填充,仅在端部)https://en.wikipedia.org/wiki/Base64

PS我必须承认,我本人最初对命名感到困惑,并认为名称已被交换。我认为b立场b ase64编码字符串”,并a一个纽约字符串”:d。


7
我认为您基本上已经证明了每个人的观点:base64是ASCII 的子集,因此尽管您可能认为btoa技术上的输出仍然是ASCII,但没有理由atob只接受base64作为输入的名称。
devios1

1
它有助于思考和记住'a'(ascii)作为base64输出,而'b'(binary)作为0和1的字符串流。
Talespin_Kit

86

我知道这很旧,但是最近在Twitter上出现了,我认为我会分享它,因为它是权威性的。

我:

@BrendanEich您选择了那些名字吗?

他:

旧的Unix名称,很难找到手册页rn,但请参见 https://www.unix.com/man-page/minix/1/btoa/。名称从Unix延续到Netscape代码库中。我在1995年匆忙地将它们反映到JS中(在5月的十天之后,但很快)。

万一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的创建者Brendan Eich。https://twitter.com/BrendanEich/status/998618208725684224


5
好吧,这是对OP问题的实际答案。
伊凡·菲

6

我目前无法找到源,但众所周知,在这种情况下,b代表“二进制”,而a代表“ ASCII”。

因此,这些函数实际上被命名为:

ASCII为二进制atob(),二进制为ASCII btoa()

请注意,这是浏览器的实现,留作传统/向后兼容的目的。例如,在Node.js中,这些不存在。


在Node中,您使用Buffer.from("Hello World").toString('base64')Buffer.from("SGVsbG8gV29ybGQ=", 'base64').toString('ascii')
Nanoo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.