ما دقیقاً نمیدانیم انسانها چه زمانی شروع به حرف زدن کردند، اما نوشتن حدود ۶۰۰۰ سال قدمت دارد. نوشتههای اول تصویری بودند و الفباهای حرفبهصدا حدود ۳۰۰۰ سال پیش ساخته شدند.
در قرن نوزدهم، مخترعان به دنبال روشهای جدید نوشتن بودند. ساموئل مورس تلگراف را اختراع کرد و برای آن کد مورس را ساخت: هر حرف با نقطهها و خطهای کوتاه و بلند نشان داده میشد. حروف بزرگ و کوچک فرقی نداشتند، ولی اعداد و علائم کد جداگانه داشتند.
قبل از مورس هم روشهای دیگری برای خواندن و نوشتن غیرمعمول وجود داشت. مثلا لویی برایل از یک سیستم نظامی الهام گرفت و خط بریل را ساخت تا نابینایان بتوانند با لمس نقاط برجسته روی کاغذ بخوانند. بریل حروف، ترکیبهای رایج، کلمات پرکاربرد و علائم نگارشی را رمزگذاری میکند و با کدهای خاص میتوان حروف بزرگ یا اعداد را مشخص کرد.
نوشتن پل انسانها به یکدیگر است؛ از نقشهای تصویری هزاران سال پیش تا کدهای مورس و بریل، هر روش، راهی بوده برای شنیدن صدای دلها، حتی وقتی زبان عاجز بود.
یک برنامه نویس معاصر
کدگذاری ASCII
کد ASCII (American Standard Code for Information Interchange) یکی از اولین و مهمترین استانداردهای کدگذاری کاراکترها در دنیای کامپیوتر است. این کد در دههی ۱۹۶۰ طراحی شد تا کامپیوترها، دستگاههای مخابراتی و چاپگرها بتوانند به زبان مشترکی برای نمایش و تبادل متن دست پیدا کنند.
در قرن نوزدهم، مخترعان به دنبال روشهای جدید نوشتن بودند. ساموئل مورس تلگراف را اختراع کرد و برای آن کد مورس را ساخت: هر حرف با نقطهها و خطهای کوتاه و بلند نشان داده میشد. حروف بزرگ و کوچک فرقی نداشتند، ولی اعداد و علائم کد جداگانه داشتند.
قبل از مورس هم روشهای دیگری برای خواندن و نوشتن غیرمعمول وجود داشت. مثلا لویی برایل از یک سیستم نظامی الهام گرفت و خط بریل را ساخت تا نابینایان بتوانند با لمس نقاط برجسته روی کاغذ بخوانند. بریل حروف، ترکیبهای رایج، کلمات پرکاربرد و علائم نگارشی را رمزگذاری میکند و با کدهای خاص میتوان حروف بزرگ یا اعداد را مشخص کرد.
در این استاندارد، هر کاراکتر (حرف، عدد، نشانه یا دستور کنترلی) با یک عدد باینری ۷ بیتی نمایش داده میشود. به این ترتیب میتوانستند ۱۲۸ کاراکتر مختلف را رمزگذاری کنند؛ شامل:
حروف بزرگ انگلیسی (A–Z)
حروف کوچک انگلیسی (a–z)
اعداد (0–9)
نشانههای نگارشی و ریاضی (مثل ! , ? , + , - , =)
کدهای کنترلی (مثل رفتن به خط جدید، بوق یا پاک کردن)
و یک کاراکتر فاصله (Space)
هر کاراکتر در ASCII یک عدد مشخص دارد؛ مثلاً:
عدد 65 = حرف A
عدد 97 = حرف a
عدد 48 = رقم 0
با اینکه ASCII برای زبان انگلیسی ساخته شد، اما بعدها نسخههای گسترشیافتهی ۸ بیتی آن (مانند Extended ASCII) ایجاد شدند تا بتوانند نمادها و حروف زبانهای دیگر را هم پشتیبانی کنند. امروزه استانداردهای جدیدتری مثل Unicode جایگزین ASCII شدهاند تا همهی زبانهای دنیا (از فارسی گرفته تا چینی) را پوشش دهند. با این حال ASCII هنوز هم پایه و اساس بیشتر سیستمهای متنی است و تقریباً همهی برنامهها و پروتکلهای اینترنتی از آن الهام گرفتهاند.
محدودیت و مشکلات ASCII
مشکل بزرگ ASCII در همان اولین کلمهی مخفف آن نمایان است. ASCII در واقع یک استاندارد آمریکایی است و حتی برای کشورهای انگلیسیزبان دیگر هم به اندازهی کافی مناسب نیست. مثلاً نماد پوند بریتانیا (£) کجاست؟
یک بیت اضافه و Extended ASCII
Extended ASCII نسخهی گسترشیافتهی استاندارد ASCII است که به جای ۷ بیت، از ۸ بیت برای هر کاراکتر استفاده میکند و به این ترتیب ۲۵۶ کاراکتر ممکن را پشتیبانی میکند.
این گسترش باعث شد علاوه بر حروف و اعداد استاندارد انگلیسی، بتوان نمادهای اضافی، حروف با اعراب و برخی علائم ریاضی و نگارشی را نیز در سیستمهای کامپیوتری استفاده کرد. Extended ASCII بیشتر در کشورهای اروپایی و برای زبانهایی که حروف اضافی دارند کاربرد دارد و به برنامهها و سیستمها این امکان را میدهد که متون غیرانگلیسی را تا حدی نمایش دهند.
مجموعه کاراکترهای DBCS
در DBCS یا Double-Byte Character Set یعنی بعضی کاراکترها به جای یک بایت، با دو بایت ذخیره میشوند. این روش برای زبانهایی مثل چینی، ژاپنی و کرهای ساخته شد چون تعداد نویسههایشان خیلی زیاد است و در یک جدول تکبایتی (۲۵۶ کاراکتر) جا نمیشوند.
مشکل اصلی مجموعهکاراکترهای دو بایتی (DBCS) این نیست که بعضی کاراکترها دو بایت دارند، بلکه این است که کاراکترهای ASCII معمولی فقط یک بایت دارند. این موضوع باعث میشود کار با رشتهها کمی پیچیده شود. برای مثال، نمیتوان فقط با شمارش بایتها طول واقعی یک رشته را فهمید. باید رشته را از اول بررسی کرد و دید هر بایت آیا شروع یک کاراکتر دو بایتی است یا نه. همینطور، اگر اشارهگری به وسط رشته داشته باشید، پیدا کردن کاراکتر قبلی کار سادهای نیست و معمولاً مجبورید از ابتدای رشته تا موقعیت اشارهگر پیش بروید تا طول واقعی و جای کاراکترها را بفهمید.
معرفی Unicode
یونیکُد یک سیستم یکنواخت ۱۶ بیتی است و به همین دلیل میتواند ۶۵٬۵۳۶ کاراکتر را نمایش دهد. این تعداد برای پوشش دادن تمام کاراکترها و نویسههای تصویری همهی زبانهای نوشتاری دنیا کافی است؛ حتی مجموعهای از نمادهای ریاضی، علائم و نشانههای ویژه را هم شامل میشود.
کاراکتر های دو بایتی
یونیکُد (بهویژه در زمینهی زبان برنامهنویسی C) از «کاراکترهای پهن یا wide characters» استفاده میکند. در یونیکُد هر کاراکتر ۱۶ بیت عرض دارد، نه ۸ بیت. بنابراین مقادیر ۸ بیتی در یونیکُد هیچ مفهومی ندارند.
بهترین ویژگی یونیکُد این است که تنها یک مجموعهکاراکتر واحد دارد؛ بنابراین هیچگونه ابهامی وجود ندارد.