在Javascript中,window.atob()
方法解码 base64 字符串,window.btoa()
方法将string
编码为 base64 。
那为什么他们的名字不像base64Decode()
和base64Encode()
?
atob()
和btoa()
没有意义,因为它们根本不是语义。
我想知道原因。
答案 0 :(得分:121)
atob()
和btoa()
方法允许作者将内容转换为base64编码和从base64编码转换内容。
在这些API中,出于助记的目的,可以考虑使用“b” 代表“二进制”,而“a”代表“ASCII”。但在实践中,为 主要是历史原因,这些都是这些原因的输入和输出 函数是Unicode字符串。
答案 1 :(得分:76)
总结已经给出的答案:
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
)是 0s 和 1s 的任意流(在javascript中必须用字符串类型表示)。 base64
中的(*)仅限于:A-Z
,a-z
,0-9
,+
,/
和{{1} (填充,仅在结尾处)https://en.wikipedia.org/wiki/Base64
P.S。我必须承认我自己最初被命名混淆,并认为名称被交换。我认为=
代表" b ase64编码字符串" 和b
代表< em>&#34; 一个 ny字符串&#34; :D。
答案 2 :(得分:54)
我知道这是旧的,但它最近出现在Twitter上,我想我会分享它,因为它是权威的。
我:
@BrendanEich你选择了这些名字吗?
他:
旧的Unix名称,很难找到手册但是看到了 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的创建者Brendan Eich。 https://twitter.com/BrendanEich/status/998618208725684224
答案 3 :(得分:5)
我目前无法找到某个来源,但众所周知,在这种情况下,b代表“二进制”,而“a”代表“&#39; ASCII&#39;” ;
因此,这些函数实际上命名为:
atob()
的ASCII到二进制,和
btoa()
的二进制到ASCII。
请注意,这是浏览器实现,仅用于传统/向后兼容目的。例如,在Node.js中,这些不存在。
答案 4 :(得分:1)
这是我要记住的 记忆符号 。这并不能真正回答问题本身,但可以帮助人们确定要使用哪个功能,而不必整天在堆栈溢出时打开该问题的选项卡。
btoa
采用一些漂亮的东西(又名美轮美content的内容,对您的应用程序有意义):json,xml,文本,二进制数据),然后将其转换为可怕的东西,而不能原谅(又名:编码)。
atob
与btoa正好相反
有些人可能会说二进制文件并不漂亮,但是,嘿,这只是帮助您的一个窍门。
答案 5 :(得分:-2)
为便于记忆,我们可以这样考虑:
before
到after
”,字符串以base64编码。after
到before
”,字符串从base64解码
编码。