ASCII اور Unicode: یہ کیا ہیں اور کس کام آتے ہیں

کمپیوٹر صرف اعداد سمجھتا ہے، اس لیے اسکرین پر نظر آنے والا ہر حرف ایک کوڈ ہے۔ ASCII پہلا کوڈ ٹیبل تھا جو معیار بنا اور Unicode وہ ہے جو آج ہم کسی بھی زبان میں لکھنے کے لیے استعمال کرتے ہیں۔ یہاں آپ دیکھیں گے کہ یہ کیسے کام کرتے ہیں، کون سے کوڈ جاننا مفید ہے، کبھی کبھی اعراب کی جگہ عجیب علامتیں کیوں آ جاتی ہیں اور سب کچھ ٹیبل میں کیسے دیکھیں۔

اپ ڈیٹ:

کریکٹر انکوڈنگ کیا ہے

انکوڈنگ ایک معاہدہ ہے: «عدد 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 تک، خالی جگہ سمیت)۔

اس میں اعراب والے حروف، اردو حروف یا یورو کی علامت نہیں ہے: اسے انگریزی کے لیے بنایا گیا تھا۔ اسی سے واضح ہوتا ہے کہ بعد میں دوسرے ٹیبلوں کی ضرورت کیوں پڑی۔

وہ کوڈ جو آپ کو سب سے زیادہ ملیں گے۔ خالی جگہ (32) نظر نہ آنے کے باوجود قابل طباعت میں شمار ہوتی ہے۔
کنٹرول حرفڈیسیملہیکساڈیسیملبائنری (7 بٹس)کس کام آتا ہے
نل (NUL)0000000000کئی زبانوں میں سٹرنگ کے اختتام کی نشانی
افقی ٹیب (TAB)9090001001اگلے ٹیب اسٹاپ پر جاتا ہے
نئی لائن (LF)100A0001010اگلی لائن پر اترتا ہے
کیریج ریٹرن (CR)130D0001101لائن کے آغاز پر لوٹتا ہے
ایسکیپ (ESC)271B0011011کنٹرول سلسلے شروع کرتا ہے
خالی جگہ32200100000پہلا قابل طباعت حرف
حذف (DEL)1277F1111111حرف مٹاتا ہے

وہ تعلقات جو یاد رکھنے کے قابل ہیں

ٹیبل کی ترتیب اتفاقی نہیں ہے۔ چند باقاعدگیوں کے ساتھ آپ کوڈ زبانی پڑھ سکتے ہیں۔

لائن کا اختتام: 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 متن بھی ہے۔ باقی زیادہ بائٹس لیتے ہیں۔

ASCII سے جتنا دور، حرف اتنے زیادہ بائٹس لیتا ہے۔
حرفکوڈ پوائنٹUTF-8 میں بائٹسبائٹس (ہیکساڈیسیمل)
AU+0041141
éU+00E92C3 A9
ñU+00F12C3 B1
€U+20AC3E2 82 AC
😀U+1F6004F0 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 حروف کو ان کے ڈیسیمل، ہیکساڈیسیمل، آکٹل اور بائنری کوڈ، اور کنٹرول حروف کے ناموں کے ساتھ دکھاتا ہے۔

  1. تلاش میں کوئی حرف، کوڈ یا کنٹرول حرف کا نام لکھیں (مثلاً A، 65، 41 یا LF) تاکہ اس کی قطار ملے۔
  2. صرف ایک گروپ دیکھنے کے لیے فلٹر بٹن (کنٹرول، اعداد، بڑے حروف، چھوٹے حروف، علامات) استعمال کریں۔
  3. تبدیل کرنے کے لیے «متن» میں متن لکھیں اور «کوڈ کا فارمیٹ» (ڈیسیمل، ہیکساڈیسیمل، آکٹل یا بائنری) چنیں: نیچے کوڈ ظاہر ہوتے ہیں۔ «Hola» ڈیسیمل میں 72 111 108 97 اور ہیکساڈیسیمل میں 48 6F 6C 61 دیتا ہے۔
  4. الٹ بھی ہو سکتا ہے: «کوڈ» میں خالی جگہوں یا کاما سے الگ کیے ہوئے کوڈ پیسٹ کریں اور متن بن جاتا ہے۔ ہیکساڈیسیمل میں 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 انکوڈنگ بتا کر کھولیں تو مسئلہ حل ہو جاتا ہے۔