🔐
← āļāļĨāļąāļšāđ„āļ›āļ„āļđāđˆāļĄāļ·āļ­

āļāļēāļĢāđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠ/āļ–āļ­āļ”āļĢāļŦāļąāļŠ Base64 āđƒāļ™ JavaScript: btoa(), atob() āđāļĨāļ° Unicode

· āđāļ—āđ‡āļ: javascript, base64, btoa, atob, nodejs, encoding, web-development

āļāļēāļĢāđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠāđāļĨāļ°āļ–āļ­āļ”āļĢāļŦāļąāļŠ Base64 āđƒāļ™ JavaScript

JavaScript āļĄāļĩāļ§āļīāļ˜āļĩāļāļēāļĢāđƒāļ™āļ•āļąāļ§āļŦāļĨāļēāļĒāļ§āļīāļ˜āļĩāđƒāļ™āļāļēāļĢāđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠāđāļĨāļ°āļ–āļ­āļ”āļĢāļŦāļąāļŠāļŠāļ•āļĢāļīāļ‡ Base64 āđ„āļĄāđˆāļ§āđˆāļēāļ„āļļāļ“āļˆāļ°āļāļģāļĨāļąāļ‡āļŠāļĢāđ‰āļēāļ‡āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āđ€āļšāļĢāļēāļ§āđŒāđ€āļ‹āļ­āļĢāđŒāļŦāļĢāļ·āļ­āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒ Node.js āļāļēāļĢāđ€āļ‚āđ‰āļēāđƒāļˆāļ§āļīāļ˜āļĩāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļāļąāļš Base64 āđ€āļ›āđ‡āļ™āļŠāļīāđˆāļ‡āļˆāļģāđ€āļ›āđ‡āļ™āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļšāļ™āļēāļĢāļĩāđƒāļ™āļĢāļđāļ›āđāļšāļšāļ—āļĩāđˆāđƒāļŠāđ‰āļ‚āđ‰āļ­āļ„āļ§āļēāļĄāđ€āļŠāđˆāļ™ JSON, HTML āđāļĨāļ° URL

āļāļēāļĢāđƒāļŠāđ‰ btoa() āđāļĨāļ° atob() āđƒāļ™āđ€āļšāļĢāļēāļ§āđŒāđ€āļ‹āļ­āļĢāđŒ

āļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļŦāļĨāļąāļāļŠāļ­āļ‡āļ•āļąāļ§āļŠāļģāļŦāļĢāļąāļš Base64 āđƒāļ™ JavaScript āļ‚āļ­āļ‡āđ€āļšāļĢāļēāļ§āđŒāđ€āļ‹āļ­āļĢāđŒāļ„āļ·āļ­ btoa() āđāļĨāļ° atob() āļŠāļ·āđˆāļ­āļŸāļąāļ‡āļāđŒāļŠāļąāļ™āđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰āđ€āļ›āđ‡āļ™āđ„āļ›āļ•āļēāļĄāļĢāļđāļ›āđāļšāļšāļāļēāļĢāļ•āļąāđ‰āļ‡āļŠāļ·āđˆāļ­āđāļšāļšāđ€āļāđˆāļē — btoa āļĒāđˆāļ­āļĄāļēāļˆāļēāļ "binary to ASCII" āđāļĨāļ° atob āļĒāđˆāļ­āļĄāļēāļˆāļēāļ "ASCII to binary" āļŸāļąāļ‡āļāđŒāļŠāļąāļ™āđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰āđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļŠāļ™āļąāļšāļŠāļ™āļļāļ™āđƒāļ™āđ€āļšāļĢāļēāļ§āđŒāđ€āļ‹āļ­āļĢāđŒāļŦāļĨāļąāļāļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļĄāļēāļ™āļēāļ™āļŦāļĨāļēāļĒāļ—āļĻāļ§āļĢāļĢāļĐ

āļāļēāļĢāđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠāļ”āđ‰āļ§āļĒ btoa()

const originalString = 'Hello, world!';
const encoded = btoa(originalString);
console.log(encoded);
// Output: SGVsbG8sIHdvcmxkIQ==

āļāļēāļĢāļ–āļ­āļ”āļĢāļŦāļąāļŠāļ”āđ‰āļ§āļĒ atob()

const base64String = 'SGVsbG8sIHdvcmxkIQ==';
const decoded = atob(base64String);
console.log(decoded);
// Output: Hello, world!

āļ—āļąāđ‰āļ‡āļŠāļ­āļ‡āļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļ—āļģāļ‡āļēāļ™āļāļąāļšāļŠāļ•āļĢāļīāļ‡āļ—āļĩāđˆāļĄāļĩāđ€āļ‰āļžāļēāļ°āļ­āļąāļāļ‚āļĢāļ° Latin-1 (āđāļ•āđˆāļĨāļ°āļ­āļąāļāļ‚āļĢāļ°āđāļ—āļ™āļ”āđ‰āļ§āļĒāđ„āļšāļ•āđŒāđ€āļ”āļĩāļĒāļ§) āļ™āļĩāđˆāđ€āļ›āđ‡āļ™āļ‚āđ‰āļ­āļˆāļģāļāļąāļ”āļŠāļģāļ„āļąāļāļ—āļĩāđˆāđ€āļĢāļēāļˆāļ°āļāļĨāđˆāļēāļ§āļ–āļķāļ‡āļ•āđˆāļ­āđ„āļ›

āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ Unicode āđāļĨāļ°āļ­āļąāļāļ‚āļĢāļ°āļ—āļĩāđˆāđ„āļĄāđˆāđƒāļŠāđˆ ASCII

āļ›āļąāļāļŦāļēāļ—āļĩāđˆāļžāļšāļšāđˆāļ­āļĒ: btoa() āļˆāļ°āđ€āļāļīāļ”āļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āđ€āļĄāļ·āđˆāļ­āđ„āļ”āđ‰āļĢāļąāļšāļŠāļ•āļĢāļīāļ‡āļ—āļĩāđˆāļĄāļĩāļ­āļąāļāļ‚āļĢāļ°āļ™āļ­āļāļŠāđˆāļ§āļ‡ Latin-1 āđ€āļŠāđˆāļ™ āļ­āļĩāđ‚āļĄāļˆāļī āļ­āļąāļāļ‚āļĢāļ°āļ āļēāļĐāļēāļˆāļĩāļ™ āļŦāļĢāļ·āļ­āļ­āļąāļāļĐāļĢāļ—āļĩāđˆāļĄāļĩāđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļŦāļĄāļēāļĒāđ€āļ™āđ‰āļ™āđ€āļŠāļĩāļĒāļ‡

btoa('Hello ä― åĨ―');
// Error: The string to be encoded contains characters outside of the Latin-1 range.

āđƒāļ™āļāļēāļĢāđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠāļŠāļ•āļĢāļīāļ‡ Unicode āļ„āļļāļ“āļ•āđ‰āļ­āļ‡āđāļ›āļĨāļ‡āļŠāļ•āļĢāļīāļ‡āđ€āļ›āđ‡āļ™āđ„āļšāļ•āđŒāļāđˆāļ­āļ™ āđāļĨāđ‰āļ§āļˆāļķāļ‡āđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠāđ„āļšāļ•āđŒāđ€āļŦāļĨāđˆāļēāļ™āļąāđ‰āļ™ āļ§āļīāļ˜āļĩāļāļēāļĢāļŠāļĄāļąāļĒāđƒāļŦāļĄāđˆāđƒāļŠāđ‰ TextEncoder āđāļĨāļ° TextDecoder API:

function unicodeToBase64(str) {
  const bytes = new TextEncoder().encode(str);
  const binaryString = String.fromCharCode(...bytes);
  return btoa(binaryString);
}

function base64ToUnicode(base64) {
  const binaryString = atob(base64);
  const bytes = Uint8Array.from(binaryString, (c) => c.charCodeAt(0));
  return new TextDecoder().decode(bytes);
}

// Usage
const encoded = unicodeToBase64('Hello ä― åĨ― 🚀');
console.log(encoded);
// Output: SGVsbG8g5L2g5aW9IPCfj4A=

const decoded = base64ToUnicode(encoded);
console.log(decoded);
// Output: Hello ä― åĨ― 🚀

āđ€āļ—āļ„āļ™āļīāļ„āļ—āļĩāđˆāđ€āļāđˆāļēāļāļ§āđˆāļēāđƒāļŠāđ‰ encodeURIComponent āđāļĨāļ° decodeURIComponent āđāļ•āđˆāļ§āļīāļ˜āļĩ TextEncoder/TextDecoder āđāļ‚āđ‡āļ‡āđāļāļĢāđˆāļ‡āļāļ§āđˆāļēāđāļĨāļ°āđ€āļ›āđ‡āļ™āđ‚āļ‹āļĨāļđāļŠāļąāļ™āļŠāļĄāļąāļĒāđƒāļŦāļĄāđˆāļ—āļĩāđˆāđāļ™āļ°āļ™āļģ

āļāļēāļĢāđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠāļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļšāļ™āļēāļĢāļĩ (ArrayBuffer)

āđ€āļĄāļ·āđˆāļ­āļ—āļģāļ‡āļēāļ™āļāļąāļšāđ„āļŸāļĨāđŒ āļĢāļđāļ›āļ āļēāļž āļŦāļĢāļ·āļ­āļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļšāļ™āļēāļĢāļĩāļ”āļīāļšāļˆāļēāļ API āđ€āļŠāđˆāļ™ fetch āļŦāļĢāļ·āļ­ FileReader āļ„āļļāļ“āļĄāļąāļāļˆāļ°āļĄāļĩ ArrayBuffer āļŦāļĢāļ·āļ­ Uint8Array āļ™āļĩāđˆāļ„āļ·āļ­āļ§āļīāļ˜āļĩāļāļēāļĢāđāļ›āļĨāļ‡āđ€āļ›āđ‡āļ™ Base64:

function arrayBufferToBase64(buffer) {
  const bytes = new Uint8Array(buffer);
  let binaryString = '';
  for (let i = 0; i < bytes.length; i++) {
    binaryString += String.fromCharCode(bytes[i]);
  }
  return btoa(binaryString);
}

function base64ToArrayBuffer(base64) {
  const binaryString = atob(base64);
  const bytes = new Uint8Array(binaryString.length);
  for (let i = 0; i < binaryString.length; i++) {
    bytes[i] = binaryString.charCodeAt(i);
  }
  return bytes.buffer;
}

āļāļēāļĢāđāļ›āļĨāļ‡āđ„āļŸāļĨāđŒāđ€āļ›āđ‡āļ™ Base64 āđƒāļ™āđ€āļšāļĢāļēāļ§āđŒāđ€āļ‹āļ­āļĢāđŒ

āļ™āļĩāđˆāļ„āļ·āļ­āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļ—āļĩāđˆāļŠāļĄāļšāļđāļĢāļ“āđŒāđ‚āļ”āļĒāđƒāļŠāđ‰ FileReader āđ€āļžāļ·āđˆāļ­āđāļ›āļĨāļ‡āđ„āļŸāļĨāđŒāļ—āļĩāđˆāļœāļđāđ‰āđƒāļŠāđ‰āđ€āļĨāļ·āļ­āļāđ€āļ›āđ‡āļ™ Base64 data URL:

function fileToBase64(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.onload = () => resolve(reader.result);
    reader.onerror = () => reject(new Error('Failed to read file'));
    reader.readAsDataURL(file);
  });
}

// Usage with a file input
document.querySelector('input[type="file"]').addEventListener('change', async (e) => {
  const file = e.target.files[0];
  try {
    const dataUrl = await fileToBase64(file);
    console.log(dataUrl); // data:image/png;base64,iVBORw0KGgo...
  } catch (err) {
    console.error('Conversion failed:', err);
  }
});

āļāļēāļĢāđƒāļŠāđ‰ Base64 āđƒāļ™ Node.js

Node.js āļĄāļĩāļ„āļĨāļēāļŠ Buffer āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ Base64 āļ‹āļķāđˆāļ‡āļĒāļ·āļ”āļŦāļĒāļļāđˆāļ™āļāļ§āđˆāļē btoa/atob āļ‚āļ­āļ‡āđ€āļšāļĢāļēāļ§āđŒāđ€āļ‹āļ­āļĢāđŒ āļ„āļĨāļēāļŠ Buffer āļˆāļąāļ”āļāļēāļĢāļāļēāļĢāđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠāđāļĨāļ°āļ–āļ­āļ”āļĢāļŦāļąāļŠāđ‚āļ”āļĒāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļī āļĢāļ§āļĄāļ–āļķāļ‡ Unicode āđāļĨāļ°āļĢāļ­āļ‡āļĢāļąāļšāļĢāļđāļ›āđāļšāļšāļāļēāļĢāđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠāļŦāļĨāļēāļĒāļĢāļđāļ›āđāļšāļš

āļāļēāļĢāđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠāđāļĨāļ°āļ–āļ­āļ”āļĢāļŦāļąāļŠāļžāļ·āđ‰āļ™āļāļēāļ™

// Encode a string to Base64
const encoded = Buffer.from('Hello, world!').toString('base64');
console.log(encoded);
// Output: SGVsbG8sIHdvcmxkIQ==

// Decode a Base64 string back to text
const decoded = Buffer.from(encoded, 'base64').toString('utf-8');
console.log(decoded);
// Output: Hello, world!

āļāļēāļĢāļĢāļ­āļ‡āļĢāļąāļš Unicode āđƒāļ™ Node.js

āļ•āđˆāļēāļ‡āļˆāļēāļ btoa() āđƒāļ™āđ€āļšāļĢāļēāļ§āđŒāđ€āļ‹āļ­āļĢāđŒ Buffer āļ‚āļ­āļ‡ Node.js āļˆāļąāļ”āļāļēāļĢ Unicode āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļĢāļēāļšāļĢāļ·āđˆāļ™:

const encoded = Buffer.from('Hello ä― åĨ― 🚀').toString('base64');
console.log(encoded);
// Output: SGVsbG8g5L2g5aW9IPCfj4A=

const decoded = Buffer.from(encoded, 'base64').toString('utf-8');
console.log(decoded);
// Output: Hello ä― åĨ― 🚀

āļāļēāļĢāļ­āđˆāļēāļ™āđ„āļŸāļĨāđŒāđāļĨāļ°āđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠāđ€āļ›āđ‡āļ™ Base64

const fs = require('fs');

// Read a file and encode it to Base64
const buffer = fs.readFileSync('image.png');
const base64 = buffer.toString('base64');
const dataUrl = `data:image/png;base64,${base64}`;

āļāļēāļĢāđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠ Base64url āđƒāļ™ Node.js

Node.js 15.7.0+ āļĢāļ­āļ‡āļĢāļąāļšāļāļēāļĢāđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠ Base64url āđ‚āļ”āļĒāļ•āļĢāļ‡ āļ‹āļķāđˆāļ‡āđāļ—āļ™āļ—āļĩāđˆ + āļ”āđ‰āļ§āļĒ - āđāļĨāļ° / āļ”āđ‰āļ§āļĒ _ āđāļĨāļ°āļĨāļ° padding:

const encoded = Buffer.from('Hello, world!').toString('base64url');
console.log(encoded);
// Output: SGVsbG8sIHdvcmxkIQ (no padding)

const decoded = Buffer.from(encoded, 'base64url').toString('utf-8');
console.log(decoded);
// Output: Hello, world!

āļ‚āđ‰āļ­āļ„āļ§āļĢāļžāļīāļˆāļēāļĢāļ“āļēāļ”āđ‰āļēāļ™āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž

āļŠāļģāļŦāļĢāļąāļšāļ‚āđ‰āļ­āļĄāļđāļĨāļ‚āļ™āļēāļ”āđƒāļŦāļāđˆ āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ Base64 āļ‹āđ‰āļģāđ† āļ­āļēāļˆāļŠāđ‰āļēāđ„āļ”āđ‰ āļ™āļĩāđˆāļ„āļ·āļ­āđ€āļ„āļĨāđ‡āļ”āļĨāļąāļšāļšāļēāļ‡āļ›āļĢāļ°āļāļēāļĢ:

  • āđƒāļŠāđ‰ TextEncoder/TextDecoder āđāļ—āļ™āļāļēāļĢāđāļ›āļĨāļ‡āļ”āđ‰āļ§āļĒāļ•āļ™āđ€āļ­āļ‡āļŠāļģāļŦāļĢāļąāļšāļŠāļ•āļĢāļīāļ‡ Unicode
  • āđƒāļ™ Node.js Buffer.from() āļ–āļđāļāļ›āļĢāļąāļšāđƒāļŦāđ‰āđ€āļŦāļĄāļēāļ°āļŠāļĄāļ­āļĒāđˆāļēāļ‡āļĄāļēāļ â€” āļ„āļ§āļĢāđƒāļŠāđ‰āđāļ—āļ™āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āļŸāļąāļ‡āļāđŒāļŠāļąāļ™āđ€āļ­āļ‡
  • āļŦāļĨāļĩāļāđ€āļĨāļĩāđˆāļĒāļ‡āļāļēāļĢāđāļ›āļĨāļ‡āđ„āļŸāļĨāđŒāļ‚āļ™āļēāļ”āđƒāļŦāļāđˆāđ€āļ›āđ‡āļ™ Base64 āđ€āļ§āđ‰āļ™āđāļ•āđˆāļˆāļģāđ€āļ›āđ‡āļ™ (āļžāļīāļˆāļēāļĢāļ“āļēāđƒāļŠāđ‰ streaming)
  • āļŠāļģāļŦāļĢāļąāļšāļŠāļļāļ”āļ‚āđ‰āļ­āļĄāļđāļĨāļ‚āļ™āļēāļ”āđƒāļŦāļāđˆ āļžāļīāļˆāļēāļĢāļ“āļēāđƒāļŠāđ‰ Blob āđāļĨāļ° FileReader āđƒāļ™āđ€āļšāļĢāļēāļ§āđŒāđ€āļ‹āļ­āļĢāđŒāđ€āļžāļ·āđˆāļ­āļŦāļĨāļĩāļāđ€āļĨāļĩāđˆāļĒāļ‡āļāļēāļĢāļšāļĨāđ‡āļ­āļ main thread

āļĨāļ­āļ‡āđƒāļŠāđ‰āļāļēāļĢāđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠ Base64 āļ­āļ­āļ™āđ„āļĨāļ™āđŒ

āļ—āļ”āļĨāļ­āļ‡āļāļēāļĢāđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠāđāļĨāļ°āļ–āļ­āļ”āļĢāļŦāļąāļŠāđƒāļ™āđ€āļšāļĢāļēāļ§āđŒāđ€āļ‹āļ­āļĢāđŒāļ‚āļ­āļ‡āļ„āļļāļ“āđ‚āļ”āļĒāđƒāļŠāđ‰ āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠāđāļĨāļ°āļ–āļ­āļ”āļĢāļŦāļąāļŠ Base64 āļ­āļ­āļ™āđ„āļĨāļ™āđŒāļŸāļĢāļĩ āđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āđ€āļ‚āļĩāļĒāļ™āđ‚āļ„āđ‰āļ” â€” āđ€āļžāļĩāļĒāļ‡āļ§āļēāļ‡āļ‚āđ‰āļ­āļ„āļ§āļēāļĄāļŦāļĢāļ·āļ­āļ­āļąāļ›āđ‚āļŦāļĨāļ”āđ„āļŸāļĨāđŒāđāļĨāļ°āļĢāļąāļšāļœāļĨāļĨāļąāļžāļ˜āđŒ Base64 āļ—āļąāļ™āļ—āļĩ

āļāļēāļĢāđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠ/āļ–āļ­āļ”āļĢāļŦāļąāļŠ Base64 āđƒāļ™ JavaScript: btoa(), atob() āđāļĨāļ° Unicode - CoolTool