کریکٹر انکوڈنگ کیا ہے
انکوڈنگ ایک معاہدہ ہے: «عدد 65 کا مطلب حرف A ہے»۔ جب آپ متن لکھتے ہیں تو پروگرام یہ اعداد محفوظ کرتا ہے؛ جب کوئی اور اسے کھولتا ہے تو اس کا پروگرام اسی معاہدے کے ذریعے انہیں واپس حروف میں بدل دیتا ہے۔ اگر دونوں ایک ہی ٹیبل استعمال نہ کریں تو متن غلط نکلتا ہے۔
دو خیالات کو الگ کرنا ضروری ہے۔ ایک کریکٹر سیٹ ہے، یعنی یہ فہرست کہ کون سا عدد کس علامت کے مطابق ہے۔ دوسرا یہ کہ یہ اعداد بائٹس میں کیسے محفوظ ہوتے ہیں۔ ASCII میں دونوں آسانی سے ایک ہیں؛ Unicode میں نہیں، اور وہیں UTF-8 آتا ہے۔
ASCII: 7 بٹس کے 128 حروف
ASCII (American Standard Code for Information Interchange کا مخفف) 1960 کی دہائی میں معیار بنا۔ یہ 7 بٹس استعمال کرتا ہے، یعنی 2 کی 7 ویں طاقت = 128 کوڈ، 0 سے 127 تک۔ ان میں سے 33 کنٹرول حروف ہیں (0 سے 31 اور 127) اور 95 قابل طباعت ہیں (32 سے 126 تک، خالی جگہ سمیت)۔
اس میں اعراب والے حروف، اردو حروف یا یورو کی علامت نہیں ہے: اسے انگریزی کے لیے بنایا گیا تھا۔ اسی سے واضح ہوتا ہے کہ بعد میں دوسرے ٹیبلوں کی ضرورت کیوں پڑی۔
| کنٹرول حرف | ڈیسیمل | ہیکساڈیسیمل | بائنری (7 بٹس) | کس کام آتا ہے |
|---|---|---|---|---|
| نل (NUL) | 0 | 00 | 0000000 | کئی زبانوں میں سٹرنگ کے اختتام کی نشانی |
| افقی ٹیب (TAB) | 9 | 09 | 0001001 | اگلے ٹیب اسٹاپ پر جاتا ہے |
| نئی لائن (LF) | 10 | 0A | 0001010 | اگلی لائن پر اترتا ہے |
| کیریج ریٹرن (CR) | 13 | 0D | 0001101 | لائن کے آغاز پر لوٹتا ہے |
| ایسکیپ (ESC) | 27 | 1B | 0011011 | کنٹرول سلسلے شروع کرتا ہے |
| خالی جگہ | 32 | 20 | 0100000 | پہلا قابل طباعت حرف |
| حذف (DEL) | 127 | 7F | 1111111 | حرف مٹاتا ہے |
وہ تعلقات جو یاد رکھنے کے قابل ہیں
ٹیبل کی ترتیب اتفاقی نہیں ہے۔ چند باقاعدگیوں کے ساتھ آپ کوڈ زبانی پڑھ سکتے ہیں۔
- اعداد «0» سے «9» تک 48 سے 57 پر ہیں (ہیکساڈیسیمل میں 30 سے 39)۔ ایک ہندسے کی قدر اس کا کوڈ منفی 48 ہے: «7» کا کوڈ 55 ہے، اور 55 − 48 = 7۔
- بڑے حروف 65 («A») سے 90 («Z») تک اور چھوٹے حروف 97 («a») سے 122 («z») تک ہیں۔
- بڑے حرف اور اس کے چھوٹے حرف کا فرق ہمیشہ 32 ہوتا ہے: «A» = 65 اور «a» = 97؛ «C» = 67 اور «c» = 99۔ بائنری میں صرف ایک بٹ بدلتا ہے: «A» کے لیے 01000001 اور «a» کے لیے 01100001۔
- یہ جاننے کے لیے کہ کوئی بڑا حرف حروفِ تہجی میں کس جگہ ہے، 64 گھٹائیں: «C» 67 ہے اور 67 − 64 = 3، تیسرا حرف۔
- چونکہ تمام بڑے حروف (65 سے 90) کے کوڈ چھوٹے حروف (97 سے 122) سے کم ہیں، اس لیے «کوڈ کے مطابق» حروفِ تہجی کی ترتیب «Zebra» کو «apple» سے پہلے رکھتی ہے۔ بہت سے پروگراموں کو درست ترتیب کے لیے الگ موازنے کا آپشن چاہیے۔
لائن کا اختتام: LF، CR اور CRLF
نئی لائن آسان لگتی ہے، لیکن نظام کے لحاظ سے مختلف لکھی جاتی ہے۔ Unix، Linux اور macOS ایک ہی حرف LF (10) استعمال کرتے ہیں۔ Windows لگاتار دو حروف CR اور LF (13 اور 10) استعمال کرتا ہے، جنہیں CRLF کہتے ہیں۔ پرانے ٹیلی پرنٹرز کو دو الگ احکام چاہیے تھے: کیریج کو شروع پر واپس لانا اور کاغذ کو ایک لائن آگے بڑھانا۔
یہی فرق ان فائلوں کی وجہ ہے جو بنیادی ایڈیٹر میں ایک ہی لائن میں نظر آتی ہیں، یا ہر سطر کے آخر میں کوئی عجیب علامت کے ساتھ۔ اگر آپ جاننا چاہتے ہیں کہ ہر ایک کا کوڈ کیا ہے تو ASCII ٹیبل کی تلاش میں LF یا CR لکھیں۔
«توسیع شدہ ASCII» کوئی معیار نہیں
چونکہ ایک بائٹ 8 بٹس کا ہوتا ہے اور ASCII صرف 7 استعمال کرتا ہے، اس لیے 128 کوڈ (128 سے 255 تک) خالی بچ گئے اور ہر کمپنی اور خطے نے انہیں اپنے طریقے سے بھر دیا۔ اسے «توسیع شدہ ASCII» کہا جاتا ہے، لیکن کوئی ایک ٹیبل موجود نہیں: بہت سے ہیں، جنہیں کوڈ پیجز کہتے ہیں۔ دو سب سے معروف Latin-1 (ISO-8859-1) ہیں، جس میں é کا کوڈ 233 ہے، اور Windows-1252، جو ملتا جلتا ہے لیکن کوڈ 128 سے 159 میں فرق ہے (مثلاً یورو وہیں ہے)۔
مسئلہ یہ ہے کہ کوڈ 233 ایک ٹیبل میں «é» اور دوسرے میں کچھ اور ہے۔ ایک ٹیبل سے لکھا اور دوسرے سے پڑھا گیا متن کچرا دکھاتا تھا۔ Unicode اسی بے ترتیبی کو ختم کرنے کے لیے بنا۔
Unicode اور UTF-8
Unicode دنیا کے تقریباً تمام تحریری نظاموں کے ہر حرف کو، علامتوں اور ایموجی کے ساتھ، ایک منفرد عدد دیتا ہے جسے کوڈ پوائنٹ کہتے ہیں۔ آج اس میں 150,000 سے زیادہ حروف ہیں۔ یہ سابقہ U+ کے ساتھ اور ہیکساڈیسیمل میں لکھا جاتا ہے: «A» U+0041 ہے، «ñ» U+00F1 ہے، یورو U+20AC ہے اور مسکراتے چہرے کا ایموجی U+1F600 ہے۔ پہلے 128 کوڈ پوائنٹ بالکل ASCII والے ہی ہیں۔
UTF-8 ان اعداد کو بائٹس میں محفوظ کرنے کا سب سے زیادہ استعمال ہونے والا طریقہ ہے، اور حرف کے مطابق 1 سے 4 بائٹس لیتا ہے۔ ASCII کے 128 ایک ہی بائٹ لیتے ہیں جو ہمیشہ والے جیسا ہے، اس لیے ASCII متن ایک درست UTF-8 متن بھی ہے۔ باقی زیادہ بائٹس لیتے ہیں۔
| حرف | کوڈ پوائنٹ | UTF-8 میں بائٹس | بائٹس (ہیکساڈیسیمل) |
|---|---|---|---|
| A | U+0041 | 1 | 41 |
| é | U+00E9 | 2 | C3 A9 |
| ñ | U+00F1 | 2 | C3 B1 |
| € | U+20AC | 3 | E2 82 AC |
| 😀 | U+1F600 | 4 | F0 9F 98 80 |
«ñ» کی جگہ «Ã±» کیوں نظر آتا ہے
یہ سب سے عام غلطی ہے اور اس کی ٹھیک وضاحت ہے۔ UTF-8 میں ñ دو بائٹس ہے: C3 اور B1۔ اگر کوئی پروگرام سمجھے کہ متن Latin-1 میں ہے تو وہ ہر بائٹ کو ایک حرف کے طور پر پڑھتا ہے: C3 «Ã» ہے اور B1 «±»۔ نتیجہ: «Ã±»۔ یہی «é» کے ساتھ ہوتا ہے، جو «Ã©» نظر آتا ہے، اور «canción» کے ساتھ، جو «canción» بن جاتا ہے۔
حل تقریباً ہمیشہ یہ ہے کہ پروگرام کو بتائیں کہ فائل UTF-8 کے طور پر کھولے (ٹیکسٹ ایڈیٹر میں یا اسپریڈ شیٹ کی امپورٹ سیٹنگ میں)۔ جب الٹ ہو، یعنی Latin-1 کا متن UTF-8 کے طور پر پڑھا جائے، تو اکثر سوالیہ نشان والے ہیرے نظر آتے ہیں، کیونکہ وہ اکیلے بائٹس درست UTF-8 سلسلے نہیں بناتے۔
ASCII ٹیبل اور کنورٹر کیسے استعمال کریں
«ASCII ٹیبل» ٹول 128 حروف کو ان کے ڈیسیمل، ہیکساڈیسیمل، آکٹل اور بائنری کوڈ، اور کنٹرول حروف کے ناموں کے ساتھ دکھاتا ہے۔
- تلاش میں کوئی حرف، کوڈ یا کنٹرول حرف کا نام لکھیں (مثلاً A، 65، 41 یا LF) تاکہ اس کی قطار ملے۔
- صرف ایک گروپ دیکھنے کے لیے فلٹر بٹن (کنٹرول، اعداد، بڑے حروف، چھوٹے حروف، علامات) استعمال کریں۔
- تبدیل کرنے کے لیے «متن» میں متن لکھیں اور «کوڈ کا فارمیٹ» (ڈیسیمل، ہیکساڈیسیمل، آکٹل یا بائنری) چنیں: نیچے کوڈ ظاہر ہوتے ہیں۔ «Hola» ڈیسیمل میں 72 111 108 97 اور ہیکساڈیسیمل میں 48 6F 6C 61 دیتا ہے۔
- الٹ بھی ہو سکتا ہے: «کوڈ» میں خالی جگہوں یا کاما سے الگ کیے ہوئے کوڈ پیسٹ کریں اور متن بن جاتا ہے۔ ہیکساڈیسیمل میں 0x41 جیسے سابقے قبول ہیں۔
اگر متن میں ایسے حروف ہوں جو ASCII نہیں ہیں، جیسے ñ، تو ٹول بتاتا ہے اور ان کا Unicode کوڈ دکھاتا ہے۔ UTF-8 کے اصل بائٹس دیکھنے کے لیے «ٹیکسٹ سے بائنری» استعمال کریں: ñ کا نتیجہ 11000011 10110001 ہے، 8 بٹس کے دو بائٹس۔ حدود: ٹیبل صرف معیاری ASCII دکھاتا ہے، توسیع شدہ نہیں، اور سب کچھ آپ کے براؤزر میں حساب ہوتا ہے، متن کسی سرور کو نہیں جاتا۔
اکثر پوچھے جانے والے سوالات
ASCII میں کتنے حروف ہیں؟
128، کوڈ 0 سے 127 تک اور ہر ایک 7 بٹس کا۔ ان میں سے 33 کنٹرول اور 95 قابل طباعت ہیں، خالی جگہ سمیت۔
حرف A اور a کا ASCII کوڈ کیا ہے؟
«A» 65 ہے (ہیکساڈیسیمل میں 41، بائنری میں 01000001) اور «a» 97 ہے (ہیکساڈیسیمل میں 61، بائنری میں 01100001)۔ ان میں ہمیشہ 32 کا فرق ہوتا ہے۔
ASCII اور Unicode میں کیا فرق ہے؟
ASCII میں انگریزی کے لیے بنائے گئے 128 حروف ہیں۔ Unicode میں 150,000 سے زیادہ ہیں، تقریباً تمام زبانوں اور ایموجی کے، اور اس کے پہلے 128 ASCII والے ہی ہیں۔
UTF-8 کیا ہے؟
یہ Unicode متن کو بائٹس میں محفوظ کرنے کا سب سے زیادہ استعمال ہونے والا طریقہ ہے۔ یہ فی حرف 1 سے 4 بائٹس لیتا ہے: ASCII والے ایک، ñ دو اور ایک ایموجی چار۔
میرا متن «Ã±» یا «Ã©» کیوں دکھا رہا ہے؟
کیونکہ UTF-8 میں محفوظ متن Latin-1 کے طور پر پڑھا جا رہا ہے۔ فائل کو UTF-8 انکوڈنگ بتا کر کھولیں تو مسئلہ حل ہو جاتا ہے۔