Tại sao Javascript `atob ()` và `btoa ()` được đặt tên như vậy?


266

Trong Javascript, window.atob()phương thức giải mã chuỗi base64window.btoa()phương thức mã hóa stringthành cơ sở64 .

Vậy thì tại sao họ không được đặt tên như thế base64Decode()base64Encode()? atob()btoa()không có ý nghĩa bởi vì chúng không phải là ngữ nghĩa.

Tôi muốn biết lý do.


153
Phải mất nhiều năm tôi mới nhận ra đó là "A đến B". Tôi đã phát âm chúng "a-tob" và "b-toa" mọi lúc.
Ryan

5
@Ryan Tôi rất vui vì đó không chỉ là tôi!
TMH

1
Đếm tôi vào. Tôi cũng nghĩ như vậy :-)
Super Coder

3
Lấy cái tôi của bạn ra khỏi danh pháp của tôi.
AJB

1
xấu name, thông thường họ sử dụng tên dài rõ ràng như getElementById,addEventListener
cieunteung

Câu trả lời:


164

Các phương thức atob()btoa()cho phép các tác giả chuyển đổi nội dung đến và từ mã hóa base64.

Trong các API này, với mục đích ghi nhớ, "b" có thể được coi là viết tắt của "nhị phân" và "a" cho "ASCII". Tuy nhiên, trên thực tế, vì lý do chủ yếu là lịch sử, cả đầu vào và đầu ra của các hàm này đều là chuỗi Unicode.

Từ: http://www.w3.org/TR/html/webappapis.html#atob


82
Nhưng nó lạc hậu. atob()chuyển đổi nhị phân thành ASCII và btoa()chuyển đổi ASCII thành nhị phân.
2540625

52
ascii là base64, và atobascii thành nhị phân. họ loại bỏ điều này ra khỏi cả hai câu trả lời. vì vậy nó không bị đảo ngược
AKnox

13
Vậy StringBinarysao?! Và tôi đã nghĩ rằng tất cả thời gian, nhị phân là một cái gì đó giống như 0 và 1. Đây là RẤT NHIỀU!
Stefan Rein

6
@StefanRein Tôi đồng ý với ý kiến ​​của bạn. window.btoađọc đối số của nó dưới dạng dữ liệu nhị phân và chia nó thành 6 bit khối để mã hóa nó; Đó là sự thật, vì vậy việc đặt tên có ý nghĩa theo quan điểm. Tuy nhiên, cũng window.btoachỉ lấy một chuỗi làm đối số của nó! :
Toàn cảnh

5
@ K._> "Tuy nhiên, cũng window.btoachỉ lấy một chuỗi làm đối số của nó!" <Điều đó đúng nhưng chuỗi ở đây chỉ là một đại diện của dữ liệu. Giống như nếu bạn cố mở một hình ảnh trong notepad, nó sẽ hiển thị dưới dạng một chuỗi nhưng đó vẫn là dữ liệu nhị phân. btoaƯu điểm chính của nó là nó không quan tâm định dạng của chuỗi, nó chỉ coi nó là nhị phân. Điều duy nhất là trong hầu hết các trường hợp, chuỗi đó xảy ra là một chuỗi thông thường.
laggingreflex

106

Để tổng hợp các câu trả lời đã cho:

  • atob là viết tắt của ASCII to binary
    • ví dụ: atob("ZXhhbXBsZSELCg==") == "example!^K"
  • btoa là viết tắt của binary to ASCII
    • ví dụ: btoa("\x01\x02\xfe\xff") == "AQL+/w=="

Tại sao A SCII và b inary:

  • ASCII (các a ) là kết quả của base64mã hóa. Một văn bản an toàn chỉ bao gồm một tập hợp các ký tự ascii (*) có thể được biểu diễn và vận chuyển chính xác (ví dụ: phần thân của email),
  • binary(the b) là bất kỳ luồng 0 nào1 nào (trong javascript, nó phải được biểu diễn bằng một loại chuỗi).

(*) Ở base64đây là những giới hạn: A-Z, a-z, 0-9,+ , /=(đệm, chỉ ở cuối) https://en.wikipedia.org/wiki/Base64

PS Tôi phải thừa nhận bản thân tôi ban đầu đã bối rối bởi việc đặt tên và nghĩ rằng tên đã được hoán đổi. Tôi nghĩ rằng viết btắt của " b ase64 chuỗi được mã hóa"acho " một chuỗi ny" : D.


7
Tôi nghĩ về cơ bản bạn đã chứng minh quan điểm của mọi người: base64 là một tập hợp con của ASCII, do đó, trong khi bạn có thể lập luận rằng đầu ra của btoavẫn là ASCII về mặt kỹ thuật, không có lý do nào cho cái tên atobchỉ chấp nhận base64 làm đầu vào.
devios1

1
Nó giúp suy nghĩ và ghi nhớ 'a' (ascii) là đầu ra base64 và 'b' (nhị phân) là luồng 0 và 1 là chuỗi.
Talespin_Kit

86

Tôi biết điều này đã cũ, nhưng gần đây nó đã xuất hiện trên Twitter và tôi nghĩ tôi sẽ chia sẻ nó vì nó có thẩm quyền.

Tôi:

@BrendanEich bạn đã chọn những cái tên đó?

Anh ta:

Tên Unix cũ, khó tìm trang man rn nhưng xem https://www.unix.com/man-page/minix/1/btoa/ Lỗi . Các tên được chuyển từ Unix vào cơ sở mã Netscape. Tôi đã phản ánh họ vào JS một cách vội vàng vào năm 1995 (sau mười ngày vào tháng 5 nhưng sẽ sớm thôi).

Trong trường hợp liên kết Minix bị hỏng, đây là nội dung trang 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).

Nguồn: Brendan Eich, người tạo ra JavaScript. https://twitter.com/BrendanEich/status/99861820872568422424


5
Chà, đây là câu trả lời thực sự cho câu hỏi của OP.
Ivan Filho

6

Tôi không thể tìm thấy một nguồn tại thời điểm này, nhưng thông thường là trong trường hợp này, b là viết tắt của 'nhị phân' và a cho 'ASCII'.

Do đó, các chức năng thực sự được đặt tên:

ASCII thành nhị phân cho atob()và nhị phân thành ASCII chobtoa() .

Lưu ý đây là triển khai trình duyệt và được dành cho các mục đích tương thích cũ / ngược. Ví dụ, trong Node.js, những thứ này không tồn tại.


Trong Node bạn sử dụng Buffer.from("Hello World").toString('base64')&Buffer.from("SGVsbG8gV29ybGQ=", 'base64').toString('ascii')
Nanoo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.