Variable-width encoding
متغیر چوڑائی انکوڈنگ ایک قسم کی کریکٹر انکوڈنگ اسکیم ہے جس میں مختلف لمبائی کے کوڈز کو نمائندگی کے لیے کریکٹر سیٹ (علامتوں کا ایک ذخیرہ) کو انکوڈ کرنے کے لیے استعمال کیا جاتا ہے، عام طور پر کمپیوٹر میں۔ سب سے زیادہ عام متغیر چوڑائی انکوڈنگ ملٹی بائٹ انکوڈنگ ہیں، جو مختلف حروف کو انکوڈ کرنے کے لیے مختلف تعداد میں بائٹس (آکٹٹس) کا استعمال کرتے ہیں۔ (کچھ مصنفین، خاص طور پر مائیکروسافٹ دستاویزات میں، ملٹی بائٹ کریکٹر سیٹ کی اصطلاح استعمال کرتے ہیں، جو کہ ایک غلط نام ہے، کیونکہ نمائندگی کا سائز انکوڈنگ کی ایک خاصیت ہے، نہ کہ کریکٹر سیٹ کی۔) ابتدائی مائکرو کمپیوٹرز کے لیے ایڈونچر گیمز میں انگریزی متن کو کم بائٹس میں پیک کرنے کے لیے بعض اوقات بائٹ فی کریکٹر سے کم استعمال کرنے والے ابتدائی متغیر چوڑائی کے انکوڈنگ کا استعمال کیا جاتا تھا۔ تاہم ڈسک (جو ٹیپ کے برعکس بے ترتیب رسائی کی اجازت دیتی ہے جس سے متن کو طلب پر لوڈ کیا جا سکتا ہے)، کمپیوٹر میموری میں اضافہ اور عام مقصد کے کمپریشن الگورتھم نے اس طرح کی چالوں کو بڑی حد تک متروک کر دیا ہے۔ ملٹی بائٹ انکوڈنگ عام طور پر حروف کی تعداد بڑھانے کی ضرورت کا نتیجہ ہوتے ہیں جنہیں موجودہ رکاوٹ کے ساتھ پسماندہ مطابقت کو توڑے بغیر انکوڈ کیا جا سکتا ہے۔ مثال کے طور پر، ایک بائٹ (8 بٹس) فی کریکٹر کے ساتھ، کوئی بھی 256 ممکنہ حروف کو انکوڈ کر سکتا ہے۔ 256 سے زیادہ حروف کو انکوڈ کرنے کے لیے، واضح انتخاب یہ ہوگا کہ فی انکوڈنگ یونٹ میں دو یا زیادہ بائٹس استعمال کیے جائیں، دو بائٹس (16 بٹس) 65,536 ممکنہ حروف کی اجازت دیں گے، لیکن اس طرح کی تبدیلی موجودہ سسٹمز کے ساتھ مطابقت کو توڑ دے گی اور اس لیے یہ بالکل ممکن نہیں ہو سکتا۔ عمومی ڈھانچہ چونکہ ملٹی بائٹ انکوڈنگ سسٹم کا مقصد موجودہ ایپلیکیشن سافٹ ویئر میں ہونے والی تبدیلیوں کو کم سے کم کرنا ہے، اس لیے کچھ حروف کو اپنے پہلے سے موجود سنگل یونٹ کوڈز کو برقرار رکھنا چاہیے، حالانکہ دوسرے حروف کے کوڈز میں متعدد یونٹس ہوتے ہیں۔ نتیجہ یہ ہے کہ متغیر چوڑائی انکوڈنگ میں تین قسم کی اکائیاں ہوتی ہیں: سنگلٹن، جو ایک یونٹ پر مشتمل ہوتے ہیں، لیڈ یونٹ، جو ملٹی یونٹ ترتیب میں پہلے آتے ہیں، اور ٹریل یونٹ، جو بعد میں ملٹی یونٹ ترتیب میں آتے ہیں۔ ان پٹ اور ڈسپلے سافٹ ویئر کو واضح طور پر ملٹی بائٹ انکوڈنگ اسکیم کے ڈھانچے کے بارے میں جاننے کی ضرورت ہے، لیکن دوسرے سافٹ ویئر کو عام طور پر یہ جاننے کی ضرورت نہیں ہے کہ آیا بائٹس کا ایک جوڑا دو الگ الگ حروف کی نمائندگی کرتا ہے یا صرف ایک کردار کی۔ مثال کے طور پر، چار حروف کی سٹرنگ "I Â NY" کو UTF-8 میں اس طرح انکوڈ کیا گیا ہے (ہیکساڈیسیمل بائٹ ویلیوز کے طور پر دکھایا گیا ہے): اس ترتیب کی چھ اکائیوں میں سے 49، 4E، اور 59 سنگلٹن ہیں (I، N، اور Y کے لیے)، ایک لیڈ یونٹ ہے اور ٹریل یونٹ ہیں۔ دل کی علامت کی نمائندگی لیڈ یونٹ اور دو ٹریل یونٹس کے امتزاج سے کی جاتی ہے۔ یو ٹی ایف-8 کسی پروگرام کے لیے تین قسم کی اکائیوں کی شناخت کرنا آسان بناتا ہے، کیونکہ وہ الگ الگ قدر کی حدود میں آتے ہیں۔ پرانے متغیر چوڑائی کے انکوڈنگ عام طور پر اچھی طرح سے ڈیزائن نہیں کیے جاتے ہیں، کیونکہ حدود اوورلیپ ہو سکتی ہیں۔ متغیر چوڑائی کی انکوڈنگ سے متعلق ایک ٹیکسٹ پروسیسنگ ایپلی کیشن کو مختلف اکائیوں کی شناخت کرنے اور متن کی صحیح تشریح کرنے کے لیے تمام حتمی ترتیبات کے آغاز سے ہی متن کو اسکین کرنا چاہیے۔ اس طرح کی انکوڈنگ میں، متن کے وسط میں سٹرنگ تلاش کرتے وقت غلط مثبت کا سامنا کرنا پڑتا ہے۔ مثال کے طور پر، اگر ہیکساڈیسیمل اقدار DE، DF، E0، اور E1 سبھی لیڈ یونٹس یا ٹریل یونٹس ہو سکتے ہیں، تو دو اکائیوں کی ترتیب DF E0 کی تلاش DE DF E0 E1 کی ترتیب میں غلط مثبت حاصل کر سکتی ہے، جو دو مسلسل دو اکائیوں کی ترتیب پر مشتمل ہے۔ اس بات کا بھی خطرہ ہے کہ ایک واحد خراب یا گمشدہ اکائی کثیر اکائیوں کے سلسلے کی پوری تشریح کو غلط قرار دے سکتی ہے۔ متغیر چوڑائی کی انکوڈنگ میں جہاں تینوں قسم کے یونٹ منقطع ہوتے ہیں، سٹرنگ سرچنگ ہمیشہ غلط مثبت کے بغیر کام کرتی ہے، اور (بشرطیکہ ڈیکوڈر اچھی طرح سے لکھا ہوا ہو) ایک یونٹ کی بدعنوانی یا نقصان صرف ایک کردار کو خراب کرتا ہے۔ ملٹی بائٹ انکوڈنگ کا پہلا استعمال چینی، جاپانی اور کوریائی کی انکوڈنگ کے لیے تھا، جن میں 256 حروف سے زیادہ بڑے کردار سیٹ ہوتے ہیں۔ شروع میں انکوڈنگ 7 بٹس کی حد تک محدود تھی۔ آئی ایس او-2022-جے پی، آئی ایس او-2022-سی این اور آئی ایس او-2022-کے آر انکوڈنگ نے لیڈ یونٹس اور ٹریل یونٹس دونوں کے لیے رینج 21-7 ای (ہیکساڈیسیمل) کا استعمال کیا، اور سنگل بائٹ اور ملٹی بائٹ موڈ کے درمیان تبدیل کرنے کے لیے آئی ایس او 2022 کے فرار کے سلسلے کا استعمال کرتے ہوئے انہیں سنگلٹن سے نشان زد کیا۔ شروع میں کل 8,836 (94 × 94) حروف کو انکوڈ کیا جا سکتا ہے، اور بدلنے کے ساتھ 94 × 94 حروف کے مزید سیٹ کیے جا سکتے ہیں۔ سی جے کے کے لیے آئی ایس او 2022 انکوڈنگ اسکیمیں اب بھی انٹرنیٹ پر استعمال میں ہیں۔ ان انکوڈنگز کی ریاستی نوعیت اور بڑا اوورلیپ انہیں عمل کرنے میں بہت عجیب بنا دیتا ہے۔ یونکس پلیٹ فارمز پر، آئی ایس او 2022 7 بٹ انکوڈنگز کی جگہ 8 بٹ انکوڈنگ اسکیموں کے ایک سیٹ نے لے لی، توسیعی یونکس کوڈ: ای یو سی-جے پی، ای یو سی-سی این اور ای یو سی-کے آر۔ ملٹی یونٹ سیکوینس اور فرار کے سیکوینس کے ساتھ سنگلٹن کے درمیان فرق کرنے کے بجائے، جس نے انکوڈنگ کو ریاستی بنا دیا، ملٹی یونٹ سیکوینس کو سب سے اہم بٹ سیٹ کے ساتھ نشان زد کیا گیا، یعنی 80-ایف ایف (ہیکساڈیسیمل) کی حد میں ہونا، جبکہ سنگلٹن صرف 00-7 ایف کی حد میں تھے۔ لیڈ یونٹس اور ٹریل یونٹس اے 1 سے ایف ای (ہیکساڈیسیمل) کی حد میں تھے، یعنی آئی ایس او 2022 انکوڈنگ میں ان کی حد کے برابر، لیکن ہائی بٹ 1 پر سیٹ کیے گئے تھے۔ ان انکوڈنگز کے ساتھ کام کرنا معقول حد تک آسان تھا بشرطیکہ آپ کے تمام حد بندی ASCII حروف ہوں اور آپ مقررہ لمبائی تک تاروں کو کاٹنے سے گریز کریں، لیکن ملٹی بائٹ کردار کے بیچ میں وقفہ اب بھی بڑی بدعنوانی کا سبب بن سکتا ہے۔ پی سی (ڈی او ایس اور مائیکروسافٹ ونڈوز پلیٹ فارمز) پر، جاپانی اور روایتی چینی کے لیے دو انکوڈنگز قائم ہوئیں جن میں تمام سنگلٹن، لیڈ یونٹ اور ٹریل یونٹ بالترتیب شفٹ-جے آئی ایس اور بگ 5 اوور لیپ ہوئے۔ شفٹ-جے آئی ایس میں، لیڈ یونٹس کی رینج 81-9 ایف اور ای 0-ایف سی تھی، ٹریل یونٹس کی رینج 40-7 ای اور 80-ایف سی تھی، اور سنگلٹنز کی رینج 21-7 ای اور اے 1-ڈی ایف تھی۔ بگ 5 میں، لیڈ یونٹس کی رینج A1-FE تھی، ٹریل یونٹس کی رینج 40-7 E اور A1-FE تھی، اور سنگلٹنز کی رینج 21-7 E تھی (تمام اقدار ہیکساڈیسیمل میں)۔ اس اوورلیپ نے ایک بار پھر پروسیسنگ کو مشکل بنا دیا، حالانکہ کم از کم زیادہ تر علامتوں میں منفرد بائٹ ویلیوز تھیں (حالانکہ عجیب بات یہ ہے کہ بیک سلیش نہیں ہے)۔ یونیکوڈ متغیر چوڑائی انکوڈنگ یونیکوڈ معیار میں دو متغیر چوڑائی انکوڈنگ ہیں: UTF-8 اور UTF-16 (اس میں ایک مقررہ چوڑائی انکوڈنگ، UTF-32 بھی ہے)۔ اصل میں، یونیکوڈ اور آئی ایس او 10646 دونوں معیارات کا مقصد فکسڈ چوڑائی ہونا تھا، یونیکوڈ 16 بٹ اور آئی ایس او 10646 32 بٹ تھا۔ آئی ایس او 10646 نے یو ٹی ایف-1 نامی متغیر چوڑائی کی انکوڈنگ فراہم کی، جس میں سنگلٹن کی رینج 00-9 ایف تھی، لیڈ یونٹ کی رینج اے 0-ایف ایف اور ٹریل یونٹ کی رینج اے 0-ایف ایف اور 21-7 ای تھی۔ اس خراب ڈیزائن کی وجہ سے، اس کی اقدار کے اوورلیپ میں شفٹ جے آئی ایس اور بگ 5 کی طرح، پلان 9 آپریٹنگ سسٹم کے موجد، جنہوں نے سب سے پہلے یونیکوڈ کو نافذ کیا، نے اسے ترک کر دیا اور اس کی جگہ یونیکوڈ کے لیے بہت بہتر ڈیزائن کردہ متغیر چوڑائی انکوڈنگ کے ساتھ تبدیل کر دیا: یو ٹی ایف-8، جس میں سنگلٹن کی رینج 00-7 ایف ہے، لیڈ یونٹس کی رینج سی 0-ایف ڈی ہے (اب دراصل سی 2-ایف 4، زیادہ طویل ترتیبات سے بچنے اور یو ٹی ایف-16 کی انکوڈنگ کی صلاحیت کے ساتھ ہم آہنگی برقرار رکھنے کے لیے ؛ یو ٹی ایف-8 مضمون دیکھیں)، اور ٹریل یونٹس کی رینج 80-بی ایف ہے۔ لیڈ یونٹ یہ بھی بتاتا ہے کہ کتنے ٹریل یونٹ پیروی کرتے ہیں: ایک C2-DF کے بعد، دو E0-EF کے بعد اور تین F0-F4 کے بعد۔ یو ٹی ایف-16 کو 16 بٹ انکوڈنگ کے ساتھ مطابقت کو توڑے بغیر اصل یونیکوڈ (1. x) کی 65,536 حروف کی حد سے آزاد ہونے کے لیے وضع کیا گیا تھا۔ یو ٹی ایف-16 میں سنگلٹن کی رینج 0000-ڈی 7 ایف ایف (55,296 کوڈ پوائنٹس) اور ای 000-ایف ایف ایف (8192 کوڈ پوائنٹس، مجموعی طور پر 63,488)، لیڈ یونٹس کی رینج ڈی 800-ڈی بی ایف ایف (1024 کوڈ پوائنٹس) اور ٹریل یونٹس کی رینج ڈی سی 00-ڈی ایف ایف (کل 1024 کوڈ پوائنٹس، 2048) ہوتی ہے۔ لیڈ اور ٹریل یونٹس، جنہیں بالترتیب ہائی سروگیٹس اور لو سروگیٹس کہا جاتا ہے، یونیکوڈ کی اصطلاحات میں، 1024 × 1024 یا 1,048,576 ضمنی حروف کا نقشہ بناتے ہیں، جس سے 1,112,064 (63,488 BMP کوڈ پوائنٹس + 1,048,576 کوڈ پوائنٹس جو اعلی اور کم سروگیٹ جوڑوں کی نمائندگی کرتے ہیں) انکوڈیبل کوڈ پوائنٹس، یا یونیکوڈ کی بول چال میں اسکیلر ویلیوز (سروگیٹس انکوڈیبل نہیں ہیں) بنتے ہیں۔ ڈبلیوچار _ ٹی وسیع حروف لوٹس ملٹی بائٹ کیریکٹر سیٹ (ایل ایم بی سی ایس) ٹرپل بائٹ کیریکٹر سیٹ (ٹی بی سی ایس) ڈبل بائٹ کیریکٹر سیٹ (ڈی بی سی ایس) سنگل بائٹ کیریکٹر سیٹ (ایس بی سی ایس) نوٹس حوالہ جات کیریکٹر انکوڈنگ بھی دیکھیں۔