UTF-8 کو Base64URL میں تبدیل کرنے کے لیے، 4 مراحل پر عمل کریں: (1) متن کو UTF-8 بائٹس میں انکوڈ کریں، (2) معیاری Base64 لاگو کریں، (3) + → - اور / → _ تبدیل کریں، (4) آخری = پیڈنگ ہٹا دیں۔ یہ RFC 4648 کے مطابق ایک URL-محفوظ اسٹرنگ تیار کرتا ہے، جو JWTs اور API ہیڈرز میں استعمال ہوتا ہے۔
معیاری Base64 بمقابلہ Base64URL
| حرف | معیاری Base64 | Base64URL | وجہ |
|---|---|---|---|
| 62واں حرف | + |
- |
+ کا مطلب URLs میں اسپیس ہے |
| 63واں حرف | / |
_ |
/ URLs میں پاتھ سیپریٹر ہے |
| پیڈنگ | = ضروری |
چھوڑ دیا گیا | = URLs میں %3D بن جاتا ہے |
| URL-محفوظ | نہیں | ہاں | کوری سٹرنگز اور فائل ناموں میں براہ راست استعمال |
RFC 4648 §5 کے مطابق، یہ “URL اور فائل نام محفوظ حروف” کراس سسٹم مطابقت کو یقینی بناتے ہیں۔

4 مرحلہ تبدیلی کا عمل
| مرحلہ | عمل | مثال (“Hello”) |
|---|---|---|
| 1 | UTF-8 متن → بائٹس | H e l l o → بائٹ اری |
| 2 | بائٹس → معیاری Base64 | SGVsbG8= |
| 3 | + → -، / → _ تبدیل کریں |
یہاں کوئی تبدیلی ضروری نہیں |
| 4 | آخری = پیڈنگ ہٹائیں |
SGVsbG8 |
Base64 انکوڈنگ ڈیٹا کے سائز کو ویکیپیڈیا کے مطابق تقریباً 33% بڑا کر دیتی ہے۔

یونیکوڈ اور ایموجی ہینڈلنگ
NextUtils کے مطابق، Base64 انکوڈنگ ہے، اینکرپشن نہیں — یہ ڈیٹا کو صرف متن والے چینلز کے ذریعے منتقل کرتا ہے۔ Unicode/emoji کو بغیر کسی خرابتی کے (“Mojibake”) ہینڈل کرنے کے لیے، ہمیشہ TextEncoder کا استعمال کرکے پہلے UTF-8 بائٹس میں تبدیل کریں۔
| ان پٹ | TextEncoder کے بغیر | TextEncoder کے ساتھ |
|---|---|---|
Hello 世界! 🌍 |
Mojibake / TypeError | درست Base64URL |
کوڈ مثالیں
JavaScript (براؤزر) — Unicode-محفوظ
function toBase64Url(str) {
const bytes = new TextEncoder().encode(str);
const base64 = btoa(String.fromCharCode(...bytes));
return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
}
Python 3 — معیاری لائبریری
AskPython کے مطابق:
import base64
data = "Hello 世界! 🌍"
encoded = base64.urlsafe_b64encode(data.encode('utf-8')).decode('utf-8').rstrip('=')
print(encoded)
Node.js — Buffer کنورژن
const str = "API_Payload_Data";
const base64url = Buffer.from(str, 'utf8')
.toString('base64')
.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=/g, '');
ٹربل شوٹنگ: پیڈنگ کی خرابیاں
| خرابی | وجہ | حل |
|---|---|---|
binascii.Error: Incorrect padding |
= پیڈنگ غائب ہے |
جب تک لمبائی 4 کا ضرب نہ ہو = شامل کریں |
TypeError with atob() |
غیر ASCII حروف | پہلے TextEncoder استعمال کریں |
| خراب آؤٹ پٹ | UTF-8 انکوڈنگ چھوڑ دی گئی | Base64 سے پہلے ہمیشہ بائٹس میں انکوڈ کریں |
AskPython کے مطابق، غائب پیڈنگ کا حساب لگائیں: padding_needed = (4 - len(data) % 4) % 4، پھر اتنے = حروف شامل کریں۔
استعمال کے معاملات: JWT اور Data URIs
JWT (JSON Web Token) کی ساخت
| حصہ | مواد | انکوڈنگ |
|---|---|---|
| ہیڈر | الگورتھم + ٹوکن کی قسم | Base64URL |
| پی لوڈ | دعوے (صارف ڈیٹا، میعاد) | Base64URL |
| دستخط | HMAC یا RSA دستخط | Base64URL |
JWTs اکثر eyJ سے شروع ہوتی ہیں — یہ { (JSON کھلنے والا بریکٹ) کی Base64URL انکوڈنگ ہے۔

استعمال کے معاملے کے لحاظ سے Base64 بمقابلہ Base64URL
| استعمال کا معاملہ | انکوڈنگ | پیڈنگ |
|---|---|---|
| JWT ٹوکنز | Base64URL | چھوڑ دی گئی |
| Data URIs (ایمبیڈڈ تصاویر) | معیاری Base64 | ضروری |
| HTTP Basic Auth | معیاری Base64 | ضروری |
| URL کوری پیرامیٹرز | Base64URL | چھوڑ دی گئی |
نتیجہ
4 مراحل: UTF-8 بائٹس → Base64 → +/ کو -_ میں تبدیل کریں → پیڈنگ ہٹائیں۔ JavaScript میں TextEncoder، Python میں base64.urlsafe_b64encode()، Node.js میں Buffer استعمال کریں۔ کراس سسٹم مطابقت کے لیے RFC 4648 پر عمل کریں۔ Base64URL انکوڈنگ ہے، اینکرپشن نہیں — سیکیورٹی کے لیے AES-256 یا TLS استعمال کریں۔
اکثر پوچھے گئے سوالات
کیا Base64URL اینکرپشن کے طور پر یکساں ہے؟
نہیں۔ Base64URL قابلِ واپسی انکوڈنگ ہے — کوئی بھی بغیر کلید کے اسے ڈی کوڈ کر سکتا ہے۔ حساس ڈیٹا کی حفاظت کے لیے AES-256 یا TLS/SSL استعمال کریں۔
Base64URL معیاری Base64 ڈی کوڈر میں کیوں ناکام ہوتی ہے؟
معیاری ڈی کوڈرز +، /، اور = پیڈنگ کی توقع رکھتے ہیں۔ Base64URL میں -، _ استعمال ہوتا ہے اور پیڈنگ چھوڑ دی جاتی ہے۔ ڈی کوڈنگ سے پہلے حرف تبدیلیاں واپس کریں اور پیڈنگ بحال کریں۔
JWTs میں پیڈنگ کیوں چھوڑ دی جاتی ہے؟
= حرف URLs میں %3D بن جاتا ہے، جس سے اسٹرنگز لمبی اور پڑھنے میں مشکل ہو جاتی ہیں۔ RFC 4648 چھوڑنے کی اجازت دیتا ہے کیونکہ ڈی کوڈرز پیڈنگ مارکرز کے بغیر بھی اصل لمبائی دوبارہ تعمیر کر سکتے ہیں۔

جواب دیں