ASCII টেবিল: কীভাবে ১২৮টি সংখ্যা টেক্সটের ভিত্তি হয়ে উঠল
ASCII, American Standard Code for Information Interchange-এর সংক্ষিপ্ত রূপ, হলো সেই এনকোডিং যা কম্পিউটারকে শিখিয়েছে একটি অক্ষর কী তা নিয়ে একমত হতে। ১৯৬৩ সালে প্রকাশিত এবং ১৯৬০-এর দশক জুড়ে পরিমার্জিত, এটি ইংরেজি টেক্সটের প্রতিটি মৌলিক অক্ষর, সংখ্যা এবং কিছু নিয়ন্ত্রণ সংকেতকে এমন সংখ্যায় ম্যাপ করে যা একটি মেশিন সংরক্ষণ ও প্রেরণ করতে পারে। আপনি যখন একটি বড় হাতের A-এর জন্য কী চাপেন, আপনার কম্পিউটার একটি আকার সংরক্ষণ করে না, এটি ৬৫ সংখ্যাটি সংরক্ষণ করে। ASCII হলো সেই লুকআপ টেবিল যা সেই সংখ্যাটিকে যেখানেই যাক না কেন A অর্থে পরিণত করে।
এই স্ট্যান্ডার্ড বিখ্যাতভাবে সংক্ষিপ্ত। ASCII একটি ৭-বিট কোড, যার মানে প্রতিটি অক্ষর সাতটি বাইনারি অঙ্কের মধ্যে ধরে যায় এবং সম্পূর্ণ সংগ্রহ ঠিক ২-এর ৭ ঘাত, বা ০ থেকে ১২৭ পর্যন্ত সংখ্যাযুক্ত ১২৮টি স্বতন্ত্র কোড পয়েন্ট জুড়ে বিস্তৃত। সেই সাশ্রয়িতা ছিল ইচ্ছাকৃত। প্রথম দিকের টেলিটাইপ ও মডেম ধীর ও ব্যয়বহুল ছিল, তাই প্রতিটি বিটই গুরুত্বপূর্ণ ছিল। বড় ও ছোট হাতের ল্যাটিন অক্ষর, দশটি সংখ্যা, সাধারণ যতিচিহ্ন, এবং ডিভাইসগুলোকে সিঙ্ক রাখা সিগন্যালিং অক্ষর কভার করতে সাতটি বিট যথেষ্ট ছিল, যার সাথে একটি বিট বাকি থাকত যা অনেক সিস্টেম এরর চেকিং-এর জন্য ব্যবহার করত।

দুটি অংশ: নিয়ন্ত্রণ অক্ষর ও প্রিন্টযোগ্য অক্ষর
টেবিলটি পরিষ্কারভাবে দুটি অঞ্চলে বিভক্ত। কোড ০ থেকে ৩১, এবং কোড ১২৭ (DEL), হলো নিয়ন্ত্রণ অক্ষর। এগুলো স্ক্রিনে কোনো গ্লিফ প্রিন্ট করে না। বরং এগুলো একটি ডিভাইসকে কিছু করার নির্দেশ দেয়: কোড ৯ হলো হরাইজন্টাল ট্যাব, কোড ১০ হলো লাইন ফিড যা নতুন লাইনে যায়, কোড ১৩ হলো ক্যারেজ রিটার্ন, আর কোড ৭ হলো বেল যা একসময় একটি টার্মিনালকে শ্রবণযোগ্যভাবে বাজাতো। মোট তেত্রিশটি এমন সিগন্যালিং কোড রয়েছে, এবং যদিও অনেকগুলো এখন ঐতিহাসিক কৌতূহলের বিষয়, লাইন ফিড, ক্যারেজ রিটার্ন এবং ট্যাব আজও টেক্সট ফাইল ফরম্যাট করার জন্য অপরিহার্য।
কোড ৩২ থেকে ১২৬ হলো প্রিন্টযোগ্য অক্ষর, মোট পঁচানব্বইটি। কোড ৩২ হলো স্পেস, যা প্রিন্টযোগ্য হিসেবে গণ্য হয় কারণ এটি কার্সার এগিয়ে দেয় যদিও কিছু দেখায় না। সেখান থেকে আপনি পাবেন যতিচিহ্ন ও প্রতীক, কোড ৪৮ থেকে ৫৭-এ সংখ্যা ০ থেকে ৯, কোড ৬৫ থেকে ৯০-এ বড় হাতের A থেকে Z, এবং কোড ৯৭ থেকে ১২২-এ ছোট হাতের a থেকে z। এই বিন্যাস থেকে একটি সুন্দর বৈশিষ্ট্য বেরিয়ে আসে: একই অক্ষরের ছোট ও বড় হাতের সংস্করণ ঠিক ৩২ দ্বারা পার্থক্যযুক্ত, যে কারণে একটি মাত্র বিট পাল্টালে কেস বদলে যায়। এই নিয়মিততাগুলো দুর্ঘটনা নয়, এগুলো এমনভাবে ডিজাইন করা হয়েছিল যাতে সরল গাণিতিক দিয়ে সর্টিং ও কেস কনভার্শন করা যায়।
দশমিক, হেক্সাডেসিমেল ও বাইনারি: একটি সংখ্যার তিনটি দৃষ্টিভঙ্গি
প্রতিটি ASCII কোড শুধুই একটি সংখ্যা, এবং আপনি এটি তিনভাবে লেখা দেখবেন। দশমিক হলো প্রাত্যহিক বেস-১০ রূপ, তাই A হলো ৬৫। হেক্সাডেসিমেল, বেস ১৬, হলো সেই রূপ যা প্রোগ্রামাররা পছন্দ করেন কারণ এটি বাইটের সাথে মিলে যায়: A হলো 0x41, এবং প্রিন্টযোগ্য পরিসীমা 0x20 থেকে 0x7E পর্যন্ত চলে। বাইনারি, বেস ২, হলো সেই রূপ যা হার্ডওয়্যার আসলে সংরক্ষণ করে, তাই A তার সাতটি বিট জুড়ে 1000001। একই অক্ষর, তিনটি নোটেশন, আর এদের মধ্যে সাবলীলভাবে যাতায়াত করতে পারা একটি মূল দক্ষতা যখন আপনি মেমরি ডাম্প বা নেটওয়ার্ক ট্রাফিক পড়ছেন। আপনি যদি প্রায়ই এই রূপান্তরগুলো নিয়ে কাজ করেন, speedor.net-এর বিস্তৃত reference tables ম্যাপিংগুলো এক ক্লিকের মধ্যে রাখে।

যেখানে ASCII এখনও গুরুত্বপূর্ণ
ASCII-কে ইতিহাসের নথিতে ফেলে দেওয়া একটি ভুল হবে। কোড স্পর্শ করেন এমন যে কারও দৈনন্দিন কাজে এটি জীবন্ত। প্রোগ্রামিং ভাষা স্ট্রিং লিটারেল, সোর্স ফাইল এবং প্রোটোকল কীওয়ার্ডকে বাইট স্তরে ASCII হিসেবে বিবেচনা করে। HTTP হেডার, SMTP, এবং অনেক কনফিগারেশন ফরম্যাটের মতো নেটওয়ার্ক প্রোটোকল ASCII-এ সংজ্ঞায়িত যাতে এগুলো মানুষের পাঠযোগ্য থাকে। যখন একটি স্ট্রিং নষ্ট দেখায়, ডেভেলপাররা একটি হেক্স ভিউয়ার নেয় এবং একটি বিপথগামী নিয়ন্ত্রণ অক্ষর বা ভুল লাইন এন্ডিং খুঁজে পেতে ASCII টেবিলের বিপরীতে কাঁচা বাইট পড়ে। URL এনকোডিং, Base64, ও এস্কেপ সিকোয়েন্স সবই ASCII মানের উপর নির্মিত। এনকোডিং বাগ ডিবাগ করা যে কারও জন্য, আপনার developer tools-এর পাশে একটি দ্রুত রেফারেন্স একটি রহস্যময় বাইটকে স্পষ্ট উত্তরে পরিণত করে।
ASCII থেকে Unicode ও UTF-8
ASCII ইংরেজি সুন্দরভাবে সামলেছে এবং প্রায় আর কিছুই না। ১২৮-অক্ষরের সীমা উচ্চারণযুক্ত অক্ষর, সিরিলিক, চীনা, আরবি বা ইমোজি ধরে রাখতে পারে না। Unicode এর উত্তর দিয়েছে প্রতিটি লিখন-পদ্ধতির প্রতিটি অক্ষরকে একটি অনন্য সংখ্যা, যাকে কোড পয়েন্ট বলা হয়, নির্ধারণ করে, এখন যা এক লক্ষেরও বেশি। গুরুত্বপূর্ণভাবে, Unicode হলো অক্ষরের একটি ক্যাটালগ, স্টোরেজ ফরম্যাট নয়, তাই সেই কোড পয়েন্টগুলোকে বাইটে রূপান্তর করতে এর একটি এনকোডিং দরকার।
UTF-8 হলো সেই এনকোডিং, এবং এটাই কারণ ASCII আসলে কখনো হারিয়ে যায়নি। UTF-8 প্রতি অক্ষরে এক থেকে চারটি বাইট ব্যবহার করে, এবং এটি এমনভাবে ডিজাইন করা হয়েছিল যাতে কোড পয়েন্ট ০ থেকে ১২৭, সম্পূর্ণ ASCII পরিসীমা, একটি একক বাইটে সংরক্ষিত হয় যা সাধারণ ASCII-এর অভিন্ন। এটি UTF-8-কে নিখুঁতভাবে পশ্চাৎ-সামঞ্জস্যপূর্ণ করে তোলে: যেকোনো বৈধ ASCII ফাইল ইতিমধ্যে একটি বৈধ UTF-8 ফাইল। ১২৭-এর উপরের অক্ষর অতিরিক্ত বাইট ব্যবহার করে। এই মার্জিত সামঞ্জস্যই একটি বড় কারণ যে UTF-8 এখন ওয়েবের সিংহভাগ শক্তি জোগায়। সংক্ষেপে, ASCII হলো মূল ১২৮-অক্ষরের কোর, Unicode হলো সেটিকে ধারণকারী সর্বজনীন ক্যাটালগ, আর UTF-8 হলো সেই এনকোডিং যা দুটোই বহন করে এবং ASCII টেক্সটকে বাইট-বাই-বাইট অপরিবর্তিত রাখে।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
ASCII টেবিলে কতগুলো অক্ষর আছে?
স্ট্যান্ডার্ড ASCII ১২৮টি অক্ষর সংজ্ঞায়িত করে, ০ থেকে ১২৭ পর্যন্ত সংখ্যাযুক্ত। এর মধ্যে, ৯৫টি স্পেস সহ প্রিন্টযোগ্য অক্ষর, এবং ৩৩টি নিয়ন্ত্রণ অক্ষর যা গ্লিফ প্রিন্ট করার বদলে ডিভাইসকে সংকেত দেয়।
নিয়ন্ত্রণ ও প্রিন্টযোগ্য অক্ষরের মধ্যে পার্থক্য কী?
নিয়ন্ত্রণ অক্ষর, কোড ০ থেকে ৩১ এবং ১২৭, একটি ডিভাইসকে লাইন ফিড বা ট্যাবের মতো কিছু করার নির্দেশ দেয় এবং কোনো দৃশ্যমান গ্লিফ তৈরি করে না। প্রিন্টযোগ্য অক্ষর, কোড ৩২ থেকে ১২৬, হলো অক্ষর, সংখ্যা, যতিচিহ্ন, এবং স্পেস যা আপনি আসলে স্ক্রিনে দেখেন।
ASCII একটি ৭-বিট কোড কেন?
সাতটি বিট ঠিক ১২৮টি সংমিশ্রণ দেয়, যা ইংরেজি অক্ষর, সংখ্যা, যতিচিহ্ন এবং নিয়ন্ত্রণ সংকেত কভার করার জন্য যথেষ্ট ছিল, একইসাথে প্রথম দিকের ধীর হার্ডওয়্যারে ব্যান্ডউইথ সাশ্রয় করেছিল। একটি বাইটের অষ্টম বিট প্রায়ই প্যারিটি এরর চেকিংয়ের জন্য সংরক্ষিত ছিল।
A অক্ষরের জন্য ASCII কোড কী?
বড় হাতের A হলো দশমিক ৬৫, হেক্সাডেসিমেল 0x41, এবং বাইনারি 1000001। ছোট হাতের a হলো দশমিক ৯৭, যা ঠিক ৩২ বেশি, একটি বিল্ট-ইন প্যাটার্ন যা সরল গাণিতিক দিয়ে কেস কনভার্শন হতে দেয়।
ASCII কি Unicode-এর মতোই?
না। ASCII ১২৮টি অক্ষর কভার করে, যেখানে Unicode প্রতিটি লিখন-পদ্ধতি জুড়ে এক লক্ষেরও বেশি ক্যাটালগ করে। ASCII কার্যকরভাবে Unicode-এর প্রথম ১২৮টি কোড পয়েন্ট, তাই এটি বৃহত্তর স্ট্যান্ডার্ডের একটি ছোট উপসেট।
UTF-8 কীভাবে ASCII-এর সাথে সম্পর্কিত?
UTF-8 হলো Unicode-এর জন্য একটি এনকোডিং যা কোড পয়েন্ট ০ থেকে ১২৭ একটি একক বাইটে সংরক্ষণ করে যা ASCII-এর অভিন্ন। এটি প্রতিটি ASCII ফাইলকে একটি বৈধ UTF-8 ফাইল বানায়, যে কারণে UTF-8 পশ্চাৎ-সামঞ্জস্যপূর্ণ এবং আধুনিক ওয়েবে প্রভাবশালী।
