तीन बाइट के समूह और पैडिंग से लंबाई निकालें
RFC 4648 का मानक Base64 तीन इनपुट बाइट को चार आउटपुट अक्षरों में दर्शाता है। अंतिम समूह में एक बाइट पर ==, दो पर = और तीन पर कोई पैडिंग नहीं होती। पैडिंग सहित और जोड़ी गई नई पंक्तियों के बिना लंबाई 4 * Math.ceil(n / 3) है। n इनपुट बाइट की संख्या है; शून्य बाइट पर लंबाई शून्य है।
n = new TextEncoder().encode(input).length
length = 4 * Math.ceil(n / 3)
f 1 Zg== 4
fo 2 Zm8= 4
foo 3 Zm9v 4
foob 4 Zm9vYg== 8इन निश्चित उदाहरणों को वास्तविक फ़ंक्शन से चलाया गया। f, fo और foo की इनपुट लंबाई अलग है, लेकिन आउटपुट चार अक्षर है; पैडिंग अलग होती है। चार बाइट वाला foob आठ अक्षर देता है। पैडिंग अंतिम समूह का स्वरूप दिखाती है, मूल टेक्स्ट में जोड़े गए अक्षर नहीं।
अक्षर, बाइट और नई पंक्ति में अंतर करें
Moyoutil TextEncoder से इनपुट को UTF-8 बाइट में बदलता है। उदाहरण 가 तीन बाइट है और 6rCA के चार अक्षर देता है। f के बाद LF नई पंक्ति दो बाइट है और Zgo= देती है। एन्कोड करते समय मूल टेक्स्ट के स्पेस और नई पंक्तियाँ डेटा हैं। HTTP हेडर, JSON आवरण और डेटा URL उपसर्ग इस सूत्र में शामिल नहीं हैं।
base64("가") // 6rCA
base64("f\n") // Zgo=Base64 टूल में मूल टेक्स्ट डालें और एन्कोड चुनें। डिकोड करने के लिए केवल मानक Base64 आउटपुट डालें। डिकोडिंग इनपुट का व्हाइटस्पेस हटाती है; एन्कोडिंग मूल व्हाइटस्पेस रखती है। Base64URL के - और _ या मनमानी बाइनरी फ़ाइल बहाली समर्थित नहीं है। /w== Base64 के रूप में पढ़ा जा सकता है, लेकिन UTF-8 टेक्स्ट न होने से त्रुटि देता है। इनपुट बदलने पर पुराना परिणाम मिटता है और कॉपी बंद होती है; फिर बदलें।
अक्सर पूछे जाने वाले प्रश्न
क्या आकार हमेशा लगभग 33% बढ़ता है?
बड़े इनपुट में अनुपात 4/3 के पास जाता है, पर छोटे इनपुट में पैडिंग का प्रभाव अधिक है। एक बाइट चार अक्षर बनती है। सटीक लंबाई के लिए बाइट गिनें और पैडिंग की स्थिति देखें।
क्या स्क्रीन खाली इनपुट को शून्य अक्षरों में बदलती है?
सूत्र शून्य बाइट पर शून्य देता है, लेकिन Moyoutil की स्क्रीन खाली इनपुट पर सामग्री माँगने वाली त्रुटि दिखाती है। सूत्र का सीमा मान और स्क्रीन की इनपुट नीति अलग हैं।