[कोड] 6 मिनट पढ़ना

[कोड] JavaScript में Base64

आधुनिक ब्राउज़र APIs के साथ Base64 एन्कोडिंग और डिकोडिंग के लिए व्यावहारिक JavaScript उदाहरण।

जनवरी 2025 | development

// मूलभूत एन्कोडिंग और डिकोडिंग

JavaScript Base64 operations के लिए built-in functions प्रदान करती है। btoa() और atob() functions basic encoding और decoding को handle करते हैं:

ये functions ASCII text के लिए बहुत अच्छे हैं, लेकिन Unicode characters के लिए विशेष handling की आवश्यकता होती है।

// मूल Base64 एन्कोडिंग
const text = 'Hello World';
const encoded = btoa(text);
console.log(encoded); // SGVsbG8gV29ybGQ=

// मूल Base64 डिकोडिंग
const decoded = atob(encoded);
console.log(decoded); // Hello World

// जांचें कि string valid Base64 है
function isValidBase64(str) {
    try {
        return btoa(atob(str)) === str;
    } catch (err) {
        return false;
    }
}

// UNICODE समर्थन

Unicode strings के लिए, हमें पहले UTF-8 bytes में convert करना होता है। आधुनिक ब्राउज़र TextEncoder और TextDecoder APIs प्रदान करते हैं:

यह approach emoji, international characters और अन्य Unicode content को correctly handle करता है।

// Unicode-safe Base64 एन्कोडिंग
function encodeBase64(str) {
    const encoder = new TextEncoder();
    const bytes = encoder.encode(str);
    const binary = String.fromCharCode(...bytes);
    return btoa(binary);
}

// Unicode-safe Base64 डिकोडिंग
function decodeBase64(base64) {
    const binary = atob(base64);
    const bytes = new Uint8Array(binary.length);
    for (let i = 0; i < binary.length; i++) {
        bytes[i] = binary.charCodeAt(i);
    }
    const decoder = new TextDecoder();
    return decoder.decode(bytes);
}

// emoji के साथ उदाहरण
const emoji = 'Hello 👋 World 🌍';
const encoded = encodeBase64(emoji);
const decoded = decodeBase64(encoded);
console.log(decoded); // Hello 👋 World 🌍

// फ़ाइल हैंडलिंग

Files को Base64 में convert करना uploads और data URIs के लिए common है। Client-side file processing के लिए FileReader API का उपयोग करें:

यह data URIs बनाता है जो HTML में directly embed हो सकते हैं या APIs को भेजे जा सकते हैं।

// File को Base64 data URI में convert करना
function fileToBase64(file) {
    return new Promise((resolve, reject) => {
        const reader = new FileReader();
        reader.onload = () => resolve(reader.result);
        reader.onerror = error => reject(error);
        reader.readAsDataURL(file);
    });
}

// File input के साथ उपयोग
document.getElementById('fileInput').addEventListener('change', async (e) => {
    const file = e.target.files[0];
    if (file) {
        try {
            const base64 = await fileToBase64(file);
            console.log(base64);
            // Result: data:image/png;base64,iVBORw0KGgoAAAA...
        } catch (error) {
            console.error('Error:', error);
        }
    }
});

// URL-SAFE BASE64

Standard Base64 + और / characters का उपयोग करता है जिन्हें URL encoding की आवश्यकता होती है। URL-safe Base64 इन्हें - और _ से replace करता है:

यह tokens, IDs और URLs के माध्यम से transmitted अन्य data के लिए आवश्यक है।

// URL-safe Base64 में convert करना
function toUrlSafeBase64(base64) {
    return base64
        .replace(/\+/g, '-')
        .replace(/\//g, '_')
        .replace(/=/g, '');
}

// URL-safe Base64 से convert करना
function fromUrlSafeBase64(urlSafeBase64) {
    let base64 = urlSafeBase64
        .replace(/-/g, '+')
        .replace(/_/g, '/');
    
    // यदि आवश्यक हो तो padding जोड़ें
    const padding = 4 - (base64.length % 4);
    if (padding !== 4) {
        base64 += '='.repeat(padding);
    }
    
    return base64;
}

// उदाहरण
const text = 'URL-safe encoding test';
const encoded = btoa(text);
const urlSafe = toUrlSafeBase64(encoded);
console.log(urlSafe); // VVJMLXNhZmUgZW5jb2RpbmcgdGVzdA

// बड़े डेटा की स्ट्रीमिंग

बड़ी files या data streams के लिए, memory issues से बचने के लिए chunks में process करें:

यह approach browser freezing को रोकता है और बड़े datasets को efficiently handle करता है।

// Stream-based Base64 एन्कोडिंग
class Base64Encoder {
    constructor() {
        this.buffer = '';
    }
    
    encode(chunk) {
        this.buffer += chunk;
        const completeBytes = Math.floor(this.buffer.length / 3) * 3;
        const toEncode = this.buffer.slice(0, completeBytes);
        this.buffer = this.buffer.slice(completeBytes);
        
        return btoa(toEncode);
    }
    
    flush() {
        if (this.buffer.length > 0) {
            const result = btoa(this.buffer);
            this.buffer = '';
            return result;
        }
        return '';
    }
}

// उपयोग
const encoder = new Base64Encoder();
let result = '';
result += encoder.encode('First chunk');
result += encoder.encode(' Second chunk');
result += encoder.flush();
console.log(result);

// एरर हैंडलिंग

Base64 operations के लिए हमेशा proper error handling implement करें:

Robust error handling application crashes को रोकता है और बेहतर user experience प्रदान करता है।

// Error handling के साथ safe Base64 operations
function safeEncode(input) {
    try {
        if (typeof input !== 'string') {
            throw new Error('Input एक string होना चाहिए');
        }
        return btoa(input);
    } catch (error) {
        console.error('Encoding error:', error.message);
        return null;
    }
}

function safeDecode(base64) {
    try {
        // Base64 format को validate करें
        if (!/^[A-Za-z0-9+/]*={0,2}$/.test(base64)) {
            throw new Error('Invalid Base64 format');
        }
        return atob(base64);
    } catch (error) {
        console.error('Decoding error:', error.message);
        return null;
    }
}

// उपयोग
const encoded = safeEncode('Hello World');
const decoded = safeDecode(encoded);
if (encoded && decoded) {
    console.log('Success:', decoded);
}