क्यों जावास्क्रिप्ट `एटोब ()` और `बटा ()` उस तरह नामित थे?


266

जावास्क्रिप्ट में, window.atob()विधि एक बेस 64 स्ट्रिंग को डिकोड करती है और window.btoa()विधि बेस 64string में एन्कोड करती है ।

तो फिर क्यों वे की तरह नामित नहीं किया गया है base64Decode()और base64Encode()? atob()और btoa()इसका कोई मतलब नहीं है क्योंकि वे शब्दार्थ बिल्कुल नहीं हैं।

मैं इसका कारण जानना चाहता हूं।


153
मुझे एहसास हुआ कि यह "ए टू बी" था। मैं उन्हें उस समय "ए-टोब" और "बी-टूए" सभी उच्चारण कर रहा था।
रयान

5
@ रयान मुझे खुशी है कि यह सिर्फ मेरे लिए नहीं था!
टीएमएच

1
मुझे गिनें। मुझे लगा कि वही :-)
सुपर कोडर

3
मेरे नामकरण से अपना अहंकार निकालो।
एजेबी

1
बुरा name, आमतौर पर वे स्पष्ट लंबे नाम का उपयोग करते हैं getElementById, जैसेaddEventListener
cieunteung

जवाबों:


164

atob()और btoa()तरीकों लेखकों के लिए और बेस 64 एन्कोडिंग से सामग्री को बदलने के लिए अनुमति देते हैं।

इन एपीआई में, एमनेमिक उद्देश्यों के लिए, "बी" को "बाइनरी", और "एएससीआईआई" के लिए "ए" माना जा सकता है। व्यवहार में, हालांकि, मुख्य रूप से ऐतिहासिक कारणों के लिए, इन कार्यों के इनपुट और आउटपुट दोनों में यूनिकोड स्ट्रिंग्स हैं।

से: http://www.w3.org/TR/html/webappapis.html#atob


82
लेकिन यह पिछड़ा हुआ है। atob()बाइनरी को ASCII में btoa()कनवर्ट करता है , और ASCII को बाइनरी में कनवर्ट करता है।
2540625

52
ascii base64 है, और atobascii से बाइनरी है। उन्होंने दोनों उत्तरों में से इसे छोड़ दिया। तो यह उलट नहीं है
AKnox

13
तो Stringहै Binary! और मुझे लगता है कि हर समय, बाइनरी 0 और 1 की तरह कुछ था। यह बहुत अच्छा है!
स्टेफेन रिन

6
@StefanRein मैं आपकी राय से सहमत हूं। बाइनरी डेटा केwindow.btoa रूप में इसके तर्क को पढ़ें और इसे एनकोड करने के लिए इसे 6 बिट्स में विभाजित करें; यह सच है, इसलिए नामकरण एक दृष्टिकोण में समझ में आता है। हालांकि, यह भी, केवल एक तर्क के रूप में एक स्ट्रिंग लेता है ! :(window.btoa
Константин Ван

5
@ K._> "हालांकि, यह भी, window.btoaकेवल एक तर्क के रूप में एक स्ट्रिंग लेता है !" <यह सच है लेकिन यहां स्ट्रिंग केवल डेटा का प्रतिनिधित्व है। जैसे अगर आप नोटपैड में इमेज खोलने की कोशिश करते हैं तो यह एक स्ट्रिंग के रूप में प्रदर्शित होगा लेकिन यह अभी भी बाइनरी डेटा है। btoaमुख्य लाभ यह है कि यह परवाह नहीं करता है कि स्ट्रिंग किस प्रारूप में है, यह सिर्फ इसे द्विआधारी के रूप में मानता है। यह केवल आकस्मिक है कि ज्यादातर मामलों में यह स्ट्रिंग एक नियमित स्ट्रिंग होती है।
लैगिंगसर्प्लेक्स

106

पहले से दिए गए उत्तरों को योग करने के लिए:

  • atob के लिए खड़ा है ASCII to binary
    • उदाहरण के लिए: atob("ZXhhbXBsZSELCg==") == "example!^K"
  • btoa के लिए खड़ा है binary to ASCII
    • उदाहरण के लिए: btoa("\x01\x02\xfe\xff") == "AQL+/w=="

क्यों एक SCII और b inary:

  • ASCII(ए a) base64एन्कोडिंग का परिणाम है । एक सुरक्षित पाठ केवल अस्सी वर्णों के सबसेट (*) से बना होता है जिसे सही ढंग से दर्शाया और ले जाया जा सकता है (जैसे ईमेल का शरीर),
  • binary( b) 0s और 1s की कोई भी धारा है (जावास्क्रिप्ट में इसे स्ट्रिंग प्रकार से दर्शाया जाना चाहिए)।

(*) में base64: इन तक ही सीमित हैं A-Z, a-z, 0-9, +, /और =(गद्दी, केवल अंत में) https://en.wikipedia.org/wiki/Base64

PS मुझे स्वीकार करना चाहिए कि मैं शुरू में नामकरण से भ्रमित था और सोचा था कि नामों की अदला-बदली की जाएगी। मुझे लगता है कि सोचा था कि bके लिए खड़े " एन्कोडेड स्ट्रिंग ase64" और aके लिए " एक ny स्ट्रिंग" डी:।


7
मुझे लगता है कि आपने मूल रूप से हर किसी की बात को सही साबित किया है: बेस 64 एएससीआईआई का एक सबसेट है, इसलिए जब आप तर्क दे सकते हैं कि आउटपुट btoaअभी भी तकनीकी रूप से एएससीआईआई है, तो नाम के लिए कोई औचित्य नहीं हैatob जो केवल बेस 64 को इनपुट के रूप में स्वीकार करता है।
devios1

1
यह and a ’(ascii) को base64 आउटपुट के रूप में सोचने और याद रखने में मदद करता है और (b’ (बाइनरी) 0 और 1 की स्ट्रीम के रूप में जो स्ट्रिंग है।
तलस्पिन_किताब

86

मुझे पता है कि यह पुराना है, लेकिन यह हाल ही में ट्विटर पर आया, और मुझे लगा कि मैं इसे आधिकारिक रूप से साझा करूंगा।

मुझे:

@BrendanEich क्या आपने उन नामों को चुना है?

उसे:

पुराने यूनिक्स नाम, मैन पेज rn खोजने के लिए कठिन है, लेकिन https://www.unix.com/man-page/minix/1/bto// देखें । यूनिक्स से नेटस्केप कोडबेस में नाम रखे गए। मैंने उन्हें 1995 में एक बड़ी हड़बड़ी में जेएस में प्रतिबिंबित किया (मई में दस दिनों के बाद लेकिन जल्द ही)।

मिनिक्स लिंक के टूटने की स्थिति में, यहाँ आदमी पृष्ठ सामग्री है:

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).

स्रोत: ब्रेंडन ईच, जावास्क्रिप्ट के निर्माता। https://twitter.com/BrendanEich/status/998618208725684224


5
खैर, यह ओपी के सवाल का वास्तविक जवाब है।
इवान फिल्हो

6

मैं फिलहाल एक स्रोत का पता नहीं लगा सकता, लेकिन यह सामान्य ज्ञान है कि इस मामले में, बी 'बाइनरी' और 'एएससीआईआई' के लिए है।

इसलिए, वास्तव में कार्यों का नाम दिया गया है:

ASCII बाइनरी के लिए atob(), और बाइनरी ASCII के लिए btoa()

ध्यान दें कि यह ब्राउज़र कार्यान्वयन है, और विरासत / पश्च-संगतता उद्देश्यों के लिए छोड़ा गया था। उदाहरण के लिए Node.js में, ये मौजूद नहीं हैं।


नोड में आप उपयोग करते हैंBuffer.from("Hello World").toString('base64')Buffer.from("SGVsbG8gV29ybGQ=", 'base64').toString('ascii')
नानू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.