为什么Javascript的“atob()”和“btoa()”这样命名?

在Javascript中,window.atob()方法解码base64字符串,window.btoa()方法将string编码为base64

那么为什么它们不像base64Decode()base64Encode()一样命名呢? atob()btoa()没有意义,因为它们根本没有语义

我想知道原因。

109128 次浏览

atob()btoa()方法允许作者将内容转换为base64编码或从base64编码转换。

在这些api中,为了便于记忆,“b”可以被认为是 “a”代表“ASCII”。但实际上,对于 主要是历史原因,既有投入也有产出 函数是Unicode字符串

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

我目前无法找到一个源,但在这种情况下,b代表'二进制',而a代表'ASCII'是常识。

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

ASCII到二进制atob(),和 btoa()的二进制到ASCII

注意,这是浏览器实现,出于遗留/向后兼容的目的而保留。例如在Node.js中,这些是不存在的。

总结一下已经给出的答案:

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

      为什么一个SCII和binary:

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

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

      附注:我必须承认我自己一开始对这个名字感到困惑,认为名字是交换的。我以为b代表bAse64编码字符串"a代表“<强> < / >强纽约字符串“:D。

我知道这很老了,但它最近在推特上出现了,我想我应该分享它,因为它是权威的。

我:

@BrendanEich这些名字是你选的吗?

他:

旧的Unix名称,很难找到手册页rn但看到 https://www.unix.com/man-page/minix/1/btoa/……这些名字被保留了下来 从Unix到Netscape的代码库。我把它们反射到JS中

. 1995年的大匆忙(在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).

来源:Brendan Eich, JavaScript的创造者。https://twitter.com/BrendanEich/status/998618208725684224

这些名称来自具有类似功能的unix函数,但你已经可以在这里的其他答案中阅读到。


下面是我要使用的助记符记。这并不能真正回答问题本身,但可以帮助人们确定应该使用哪个函数,而不必整天纠结于堆栈溢出的问题。

美丽到可怕btoa

把一些漂亮的东西(也就是对你的应用程序有意义的漂亮内容:json, xml,文本,二进制数据)转换成一些糟糕的东西,不能被理解(也就是:编码)。

糟糕到美丽atob

和btoa完全相反

请注意

有些人可能会说二进制不漂亮,但是,嘿,这只是一个帮助你的技巧。