왜 자바 스크립트`atob ()`와`btoa ()`의 이름이 그렇게 되었습니까?


266

Javascript에서 window.atob()method는 base64 문자열을 디코딩 하고 window.btoa()method는 base64string 로 인코딩합니다 .

그럼 왜 그들은 같은 이름이되지 않은 base64Decode()base64Encode()? atob()그리고 btoa()그들은 모두에서 의미하지이기 때문에 이해가되지 않습니다.

이유를 알고 싶습니다.


153
그것이 "A to B"라는 것을 깨닫기 위해 몇 년이 걸렸습니다. 나는 항상 그들에게 "a-tob"와 "b-toa"를 발음하고 있었다.
Ryan

5
@Ryan 나는 나만이 아니기 때문에 기쁘다!
TMH

1
나도
Super Coder

3
내 명명법에서 자존심을 제거하십시오.
AJB

1
나쁜 name, 보통 사용 명확 긴 이름처럼 getElementById,addEventListener
cieunteung

답변:


164

atob()btoa()방법은 저자가하고 base64 인코딩 콘텐츠를 변환 할 수 있습니다.

이러한 API에서 니모닉 목적으로 "b"는 "이진", "a"는 "ASCII"를 나타내는 것으로 간주 할 수 있습니다. 그러나 실제로 역사적으로 인해 이러한 함수의 입력과 출력은 모두 유니 코드 문자열입니다.

보낸 사람 : http://www.w3.org/TR/html/webappapis.html#atob


82
그러나 뒤로입니다. atob()이진을 ASCII btoa()로 변환하고 ASCII를 이진으로 변환합니다.
2540625

52
ascii는 base64이며 atob바이너리에 대한 ASCII입니다. 그들은 이것을 두 가지 대답에서 제외했습니다. 그래서이 환입 할 수 없습니다
AKnox

13
그래서이 String있다 Binary?! 그리고 나는 항상 바이너리가 0과 1과 같은 것이라고 생각했습니다. 이것은 매우 혼란 스럽습니다!
Stefan Rein

6
@StefanRein 나는 당신의 의견에 동의합니다. window.btoa인수를 이진 데이터 로 읽고이를 인코딩하기 위해 6 비트 청크로 분할합니다. 사실이므로 명명의 관점에서 의미가 있습니다. 그러나 문자열 을 인수 window.btoa로만 사용하십시오 ! :(
Константин Ван

5
@ K._> "그러나 문자열 은 인수 window.btoa로만 사용됩니다 !" <사실이지만 여기서 문자열은 데이터의 표현 일뿐입니다. 메모장에서 이미지를 열려고하면 문자열로 표시되지만 여전히 이진 데이터입니다. 의 주요 장점은 문자열의 형식을 신경 쓰지 않고 바이너리로 취급한다는 것입니다. 대부분의 경우 해당 문자열이 일반 문자열 인 경우는 우연입니다. btoa
laggingreflex

106

이미 주어진 답변을 요약하면 다음과 같습니다.

  • atob ~의 약자 ASCII to binary
    • 예 : atob("ZXhhbXBsZSELCg==") == "example!^K"
  • btoa ~의 약자 binary to ASCII
    • 예 : btoa("\x01\x02\xfe\xff") == "AQL+/w=="

A SCII와 b가 다른가 :

  • ASCII( a)는 base64인코딩 결과입니다 . 안전 만을 정확하게 표현하고 운반 할 수 있습니다 ASCII 문자의 부분 집합 (*)로 구성된 텍스트 (예 : 이메일의 몸)
  • binary( b)는 01의 스트림입니다 (자바 스크립트에서는 문자열 유형으로 표시되어야 함).

(*)에서 base64이러한 제한되어 A-Z, a-z, 0-9, +, /=(패딩만을 끝) https://en.wikipedia.org/wiki/Base64

추신 : 나는 나 자신이 처음 명명에 혼란스러워하고 이름이 바뀌 었다는 것을 인정해야합니다. 나는 그 생각 b에 대한 입장을 " B 인코딩 된 문자열 ase64"a위해 " 뉴욕 문자열" D :.


7
기본적으로 모든 사람의 요점을 입증했다고 생각합니다. base64는 ASCII 의 하위 집합 이므로 btoa여전히 출력이 기술적으로 ASCII 라고 주장 할 수 있지만 base64 만 입력으로 받아들이는 이름에 대한 정당성은 없습니다atob .
devios1

1
'a'(ascii)를 base64 출력으로, 'b'(바이너리)를 문자열 인 0과 1의 스트림으로 생각하고 기억하는 데 도움이됩니다.
Talespin_Kit

86

나는 이것이 오래되었다는 것을 알고 있지만 최근에 트위터에 올라 왔으며 권위있는 것처럼 공유 할 것이라고 생각했습니다.

나를:

@BrendanEich 그 이름을 골랐나요?

그를:

오래된 유닉스 이름은 매뉴얼 페이지를 찾기 어렵지만 https://www.unix.com/man-page/minix/1/btoa/…를 참조 하십시오 . 이름은 Unix에서 Netscape 코드베이스로 옮겨졌습니다. 1995 년에 서둘러 JS에 반영했습니다 (5 월 10 일 이후 곧).

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의 질문에 대한 실제 답변입니다.
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.