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

时间:2015-11-22 11:11:59

标签: javascript

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

那为什么他们的名字不像base64Decode()base64Encode()atob()btoa()没有意义,因为它们根本不是语义。

我想知道原因。

6 个答案:

答案 0 :(得分:121)

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

  

在这些API中,出于助记的目的,可以考虑使用“b”   代表“二进制”,而“a”代表“ASCII”。但在实践中,为   主要是历史原因,这些都是这些原因的输入和输出   函数是Unicode字符串。

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

答案 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:

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

(*)仅限于:A-Za-z0-9+/和{{1} (填充,仅在结尾处)https://en.wikipedia.org/wiki/Base64

P.S。我必须承认我自己最初被命名混淆,并认为名称被交换。我认为=代表&#34; b ase64编码字符串&#34; 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)

为便于记忆,我们可以这样考虑:

  1. btoa代表“从beforeafter”,字符串以base64编码。
  2. atob代表“从afterbefore”,字符串从base64解码 编码。