Javascriptの `atob()`と `btoa()`がそのように命名されたのはなぜですか?


266

JavaScriptでは、window.atob()メソッドはbase64文字列をデコードし、メソッドはbase64にwindow.btoa()エンコードstringます

そして、なぜ彼らは次のように命名されていなかったbase64Decode()base64Encode()atob()そしてbtoa()、彼らはすべてのセマンティックじゃないので意味がありません。

その理由を知りたい。


153
それが「A to B」であることに気づくのに何年もかかりました。私はそれらの間ずっと「a-tob」と「b-toa」を発音していました。
ライアン

5
@ライアン私だけじゃなくてよかった!
TMH 2016年

1
私を数えてください。私は同じことを考えました:-)
スーパーコーダー

3
私の命名法からあなたの自我を取り除いてください。
AJB 2017

1
悪いがname、通常、彼らは次のように明確な長い名前を使用しgetElementByIdaddEventListener
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です。彼らは両方の答えからこれを一種残しました。そのため、
元に戻され

13
そうStringですBinary!そして私はいつもバイナリを0と1のようなものだと思っていました。これはとても混乱しています!
Stefan Rein、2016年

6
@StefanRein私はあなたの意見に同意します。window.btoa引数をバイナリデータとして読み取り、エンコードするために6ビットのチャンクに分割します。それは本当ですので、この名前は見方によっては理にかなっています。ただし、また、引数として文字列window.btoaのみを取ります!:(
КонстантинВан

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=="

なぜA 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するために、「NYの文字列」 D:。


7
基本的にはすべての人の要点を証明したと思います:base64はASCIIのサブセットです。したがって、出力btoaはまだ技術的にはASCIIであると主張するかもしれませんが、入力としてbase64のみを受け入れる名前正当化されませんatob
devios1

1
これは、「a」(ascii)をbase64出力として、「b」(バイナリ)を0および1の文字列であるストリームとして考えると覚えやすくなります。
Talespin_Kit

86

古いことは知っていますが、最近Twitterで公開されたので、信頼できるので共有したいと思いました。

私:

@BrendanEichあなたはそれらの名前を選びましたか?

彼:

古いUnix名、manページrnを見つけるのは難しいですが、https: //www.unix.com/man-page/minix/1/btoa/…を参照して ください。名前はUnixからNetscapeコードベースに引き継がれました。私は1995年に急いでJSにそれらを反映しました(5月の10日後、間もなく)。

Minixリンクが壊れた場合のmanページの内容は次のとおりです。

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の質問に対する実際の答えです。
Ivan Filho

6

現時点ではソースを見つけることができませんが、この場合、bは「バイナリ」を表し、aは「ASCII」を表すことはよく知られています。

したがって、関数には実際には次の名前が付けられます。

の場合はASCIIからバイナリへatob()、およびの場合はバイナリからASCIIへbtoa()

これはブラウザの実装であり、レガシー/下位互換性のために残されていることに注意してください。たとえばNode.jsでは、これらは存在しません。


ノードではBuffer.from("Hello World").toString('base64')&を使用Buffer.from("SGVsbG8gV29ybGQ=", 'base64').toString('ascii')
Nanoo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.