Arsn
2012/10/13, 22:02
با سلام و عرض ادب خدمت همه سخت افزاری های عزیز ! در ادامه سری مقالات آموزشی آشنایی با مفاهیم پایه کامپیوتر تصمیم بر آن شد که این بار استاندارد یونیکد را با هم مورد بررسی قرار بدیم و تفاوت آن با کد های اسکی را نیز بررسی کنیم !
استاندارد Unicode، يک روش رمزگذارى با عرض ثابت، براى نوشتن نويسهها و متون مىباشد.
اين استاندارد با نويسههاى الفبايى، نويسههاى تجسمى و سمبلها به شکل يکسانى برخورد مىکند و در نتيجه مىتوان آنها را در هر ترکيبى و با امکان برابر بکار گرفت.
استاندارد Unicode از يک رمزگذارى 16 بيتى استفاده مىکند، تا بتواند از متون چند زبانه به طور کامل پشتيبانى کند. در اين رمزنگارى، به هيچگونه کد کنترلى براى مشخص کردن نويسههاى يک زبان خاص نياز نمىباشد.
ASCII/8859-1
Unicode
A
0100 0001
A
0000 0000 0100 0001
S
0101 0011
S
0000 0000 0101 0011
C
0100 0011
C
0000 0000 0100 0011
I
0100 1001
I
0000 0000 0100 1001
I
0100 1001
I
0000 0000 0100 1001
استاندارد Unicode براى هر يک از نويسهها، يک مقدار عددى و يک نام مشخص کرده است و از اين جهت شبيه ساير استانداردهاى رمزگذارى مانند ASCII است
در کنار انتساب کد نويسهها و نامها به يکديگر، استاندارد Unicode اطلاعات ديگرى که در استانداردهاى مجموعهنويسه(Character Set) مرسوم، موجود نمىباشد را ارائه مىکند که براى بکارگيرى رمزگذارى نويسهها در پيادهسازى ضرورى مىباشد.
هدف اصلى از ارائه استاندارد Unicode، گريز از دو مشکل اساسى است که در بيشتر برنامههاى کامپيوترى چندزبانه وجود دارد:
سربار (Overloading) ناشى از مکانيزم فونت به هنگامِ رمزگذارى نويسهها ، بکارگيرى چند کد نويسه ناسازگار به علت تداخل استانداردهاى نويسه محلى و صنعتى.
فضاى ۷-بيتى کد ASCII و توسعهيافته ۸-بيتى آن، که در بيشتر سيستمهاى نرمافزارى مورد استفاده قرار مىگيرند، متناظراً به 128 و 256 نويسه محدود مىشوند که براى يک محيط نرمافزارى سراسرى ناکافى مىباشد.
طراحان Unicode روشى تکشکل براى شناسايى نويسهها پيشنهاد کردند که کاراتر و انعطافپذيرتر از سيستمهاى رمزگذارى قبلى باشد.
ويژگىهاى اوليه که در طراحى استاندارد Unicode در نظرگرفته شدهاند، عبارتند از:
جهانى(Universal)
فهرست نويسهها بايد بقدر کافى بزرگ باشد تا همه نويسههايى که احتمالاً در متون عمومى استفاده مىشوند(شامل مجموعهنويسههاى بينالمللى، محلى و صنعتى) را دارا باشد.
کارایی (Efficiency)
متن مسطح(Plain) مرکب از دنباله نويسههاى عرضثابت، مدل بسيار مفيدى ارائه مىدهد چراکه تجزيه(Parse) آن ساده است: نرمافزار اجبارى به نگهدارى وضعيت، جستجو براى دنبالههاى escape ويژه، يا جستجوى پيشرو يا پسرو براى شناسايى نويسهها ندارد.
تکشکل(Uniform)
کد نويسه ثابت امکان کاراىِ مرتبسازى، جستجو، نمايش، و ويرايش متن را فراهم مىسازد.
ناگُنگ(Unambiguous)
هر مقدار16بيتى دادهشده هميشه يک نويسه را نشان مىدهد.
از مهمترين مزايايی كه يونیكد برای زبان فارسی دارد (مثل بسياری زبانهای ديگر) میتوان موارد زير را نام برد:
در نسخه استاندارد هر نرمافزاری كه از اين استاندارد پشتيبانی كند، میتوان فارسی نوشت يا متون فارسی را خواند. بدين ترتيب ديگر نيازی به تأمين نسخههای خاص فارسی يا عربی نيست.
برای خواندن متون فارسی كه توسط شركت خاصی نوشته شدهاند، نيازی به داشتن فونت خاص آن شركت نداريم و هر متن فارسی كه با استاندارد يونیكد، كدگذاری شده باشد، با هر فونت يونیكدی قابل مشاهده است.
امكان استفاده همزمان از زبانهای فارسی و انگليسی را تأمين میكند.
بدون استفاده از فونتهای خاص امكان استفاده از علائم خاص را فراهم میكند.
به بيان ديگر، «استاندارد يونیكد» استاندارد جهانی كدگذاری كاركترهاست كه برای پردازش كامپيوتری متون به كار میرود. اين استاندارد همان كاراكترها و كدهای استاندارد ISO/IEC 10646 را داراست و كاملا با آن سازگار است. پس در واقع هر پيادهسازی سازگار با يونیكد، با ISO/IEC 10646 نيز سازگار است.
يونیكد امكان كدگذاری همه كاراكترهای مورد استفاده در نوشتن زبانهای دنيا را فراهم آوردهاست. اين استاندارد از كدگذاری 16بيتی استفاده میكند كه برای بيش از65000 نويسه (كاراكتر) جا فراهم میكند. اگر چه 65000 نويسه برای كدگذاری اكثر نويسههايی كه در زبانهای مهم دنيا استفاده میشود كافی است، با اين حال يونیكد شيوهگسترشی بهنام UTF-16 فراهمكردهاست كه امكان اضافهكردن حدود يك ميليون نويسه ديگر را نيز میدهد. اين دامنه برای كليه نويسههای عالم، از جمله پوشش كامل همه خطهای باستانی (همچون خط ميخی) نيز كافی است.
يونیكد برای كليه نويسههای مورد استفاده در زبانهای عمده دنيا كد تعيينكردهاست. بهعلت گستردهبودن فضای تخصيص نويسه، اين استاندارد بسياری از نمادهای لازم برای حروفچينی را نيز در بر گرفتهاست. از خطهای مورد پشتيبانی اين استاندارد میتوان به لاتين (دربرگيرنده اكثر زبانهای اروپايی)، سيريليك(روسی، صربی)، يونانی، عربی (شامل عربی، فارسی، اردو، كردی)، عبری، هندی، ارمنی، آسوری، چينی، كاتاكانا و هيراگانا(ژاپنی)، و هانگول (كرهای) اشارهكرد. بهعلاوه، تعداد زيادی نماد رياضی و فنی علائم نقطهگذاری، پيكان، و علامتهای متفرقهدر اين استاندارد وجود دارد. اين استاندارد برای علامتهای تركيبشونده يا اعرابها نيز كدهايی در نظر گرفتهاست كهاز جمله آنها علامتهايی چون «˜» (مد)هستند كه در تركيبب حروف پايه، حروف تغييرلحن يافتهای چون «ñ» را میسازند.
به طور كلی، بعضی از مشخصات يونیكد به شرح زير است:
نويسههای شانزده بيتی
يكیسازی (اختصاص يك كد به نويسههای مشترك در چند زبان مختلف)
نويسه، نه شكل (يك «ع»، و نه چهارتا: «ﻋ»، «ﻌ»، «ﻊ»، «ﻉ»)
بار معنايی (حرفبودن، مقدار عددی، ...)
در استاندارد يونیكد، نويسههای فارسی در بلوك مربوط بهخط عربی قرار دارند. اين بلوكبرای دربرگرفتن نويسههای زبانهايی كهاز خط عربیاستفادهمیكنند، مثل فارسی، اردو، پشتو، سندی، و كردی گسترش يافته است. اين بلوك نشانههای قرآنی از قبيل نشانههای سجده و پايان آيه، و علائم وقف را نيز در بردارد.
در يونیكد با وجود يكیسازی كدهای حروف مشترك، برای حروف فارسی كه بار معنايی يا نمايشی متفاوت با حروف عربی دارند، نويسههای جداگانه درنظر گرفتهشدهاست. يعنی كليه حروف خاص فارسی (پ، چ، ژ، گ) و نيز «ك» و «ی» فارسی كهبا حرف مشابهدر عربیتفاوت نمايشی دارند، مكانجداگانهای بهخود اختصاص دادهاند. كليه اعرابهای متداول حضور دارند و ميان شكلفارسی/اردو و عربی ارقام نيز بهعلت شكل و رفتار متفاوت، تفاوتهايی منظور گشتهاست.
از طرف ديگر، علائم نقطهگذاری چون نقطه و فاصله كهشكلی كسانیدر خطهای لاتين و عربی دارند، كد يكسان دارند. علائمیچون پرانتز نيز، بسته به جهت متن، آينهای میشوند، به طور مثال، نويسه 0028 نماينده «پرانتز باز» است، و نه«پرانتز سمتچپ». يونیكد اتصالمجازی و فاصله مجازی را نيز تحتنامهای «اتصال با عرضصفر» و «بیاتصالی با عرضصفر» بهرسميت میشناسد.
بدين ترتيب ملاحظه میشود كه برای حل مشكلات موجود، و نيز رفتن به سوی يك استاندارد مقبول و همهجانبه، استاندارد يونیكد، روشی مناسب به نظر میرسد. در شمارههای آتی ماهنامه نيز به اين موضوع از جنبههای ديگر خواهيم پرداخت.
اصطلاحات:
نويسه: در مقابل character. كوچكترين واحد متن. مثلاً يك حرف لاتين، يك اعراب فارسی، يكی علامت نقطهگذاری، يك نشانه بريل، يا يك نماد رياضی
شكل: در مقابل glyph. كوچكترين واحد نمايش متن. برای بعضی نويسهها مثل حروف فارسی و هندی ممكن است چند شكل موجود باشد. مثلاً « ﺑ » و « ﻊ » از اشكالنمايشی محسوب میشوند.
مجموعه نويسه: در مقابلcharacter set. مجموعهای از نويسهها كهبههر نويسه عددی اختصاصمیدهد كه نماينده آن نويسه محسوب میشود و در تبادل اطلاعات مورد استفادهقرار میگيرد.
مجموعه كد: در مقابل code page. سيستمی كه بههر نويسه دنباله مشخصیاز بايتها را متناظر میكند. مجموعهنويسهها میتوانند بهشكل يا چند مجموعه كد قابل استفادهباشند.
نگارش و گردآوری : علیرضا سجادی نیا !
استاندارد Unicode، يک روش رمزگذارى با عرض ثابت، براى نوشتن نويسهها و متون مىباشد.
اين استاندارد با نويسههاى الفبايى، نويسههاى تجسمى و سمبلها به شکل يکسانى برخورد مىکند و در نتيجه مىتوان آنها را در هر ترکيبى و با امکان برابر بکار گرفت.
استاندارد Unicode از يک رمزگذارى 16 بيتى استفاده مىکند، تا بتواند از متون چند زبانه به طور کامل پشتيبانى کند. در اين رمزنگارى، به هيچگونه کد کنترلى براى مشخص کردن نويسههاى يک زبان خاص نياز نمىباشد.
ASCII/8859-1
Unicode
A
0100 0001
A
0000 0000 0100 0001
S
0101 0011
S
0000 0000 0101 0011
C
0100 0011
C
0000 0000 0100 0011
I
0100 1001
I
0000 0000 0100 1001
I
0100 1001
I
0000 0000 0100 1001
استاندارد Unicode براى هر يک از نويسهها، يک مقدار عددى و يک نام مشخص کرده است و از اين جهت شبيه ساير استانداردهاى رمزگذارى مانند ASCII است
در کنار انتساب کد نويسهها و نامها به يکديگر، استاندارد Unicode اطلاعات ديگرى که در استانداردهاى مجموعهنويسه(Character Set) مرسوم، موجود نمىباشد را ارائه مىکند که براى بکارگيرى رمزگذارى نويسهها در پيادهسازى ضرورى مىباشد.
هدف اصلى از ارائه استاندارد Unicode، گريز از دو مشکل اساسى است که در بيشتر برنامههاى کامپيوترى چندزبانه وجود دارد:
سربار (Overloading) ناشى از مکانيزم فونت به هنگامِ رمزگذارى نويسهها ، بکارگيرى چند کد نويسه ناسازگار به علت تداخل استانداردهاى نويسه محلى و صنعتى.
فضاى ۷-بيتى کد ASCII و توسعهيافته ۸-بيتى آن، که در بيشتر سيستمهاى نرمافزارى مورد استفاده قرار مىگيرند، متناظراً به 128 و 256 نويسه محدود مىشوند که براى يک محيط نرمافزارى سراسرى ناکافى مىباشد.
طراحان Unicode روشى تکشکل براى شناسايى نويسهها پيشنهاد کردند که کاراتر و انعطافپذيرتر از سيستمهاى رمزگذارى قبلى باشد.
ويژگىهاى اوليه که در طراحى استاندارد Unicode در نظرگرفته شدهاند، عبارتند از:
جهانى(Universal)
فهرست نويسهها بايد بقدر کافى بزرگ باشد تا همه نويسههايى که احتمالاً در متون عمومى استفاده مىشوند(شامل مجموعهنويسههاى بينالمللى، محلى و صنعتى) را دارا باشد.
کارایی (Efficiency)
متن مسطح(Plain) مرکب از دنباله نويسههاى عرضثابت، مدل بسيار مفيدى ارائه مىدهد چراکه تجزيه(Parse) آن ساده است: نرمافزار اجبارى به نگهدارى وضعيت، جستجو براى دنبالههاى escape ويژه، يا جستجوى پيشرو يا پسرو براى شناسايى نويسهها ندارد.
تکشکل(Uniform)
کد نويسه ثابت امکان کاراىِ مرتبسازى، جستجو، نمايش، و ويرايش متن را فراهم مىسازد.
ناگُنگ(Unambiguous)
هر مقدار16بيتى دادهشده هميشه يک نويسه را نشان مىدهد.
از مهمترين مزايايی كه يونیكد برای زبان فارسی دارد (مثل بسياری زبانهای ديگر) میتوان موارد زير را نام برد:
در نسخه استاندارد هر نرمافزاری كه از اين استاندارد پشتيبانی كند، میتوان فارسی نوشت يا متون فارسی را خواند. بدين ترتيب ديگر نيازی به تأمين نسخههای خاص فارسی يا عربی نيست.
برای خواندن متون فارسی كه توسط شركت خاصی نوشته شدهاند، نيازی به داشتن فونت خاص آن شركت نداريم و هر متن فارسی كه با استاندارد يونیكد، كدگذاری شده باشد، با هر فونت يونیكدی قابل مشاهده است.
امكان استفاده همزمان از زبانهای فارسی و انگليسی را تأمين میكند.
بدون استفاده از فونتهای خاص امكان استفاده از علائم خاص را فراهم میكند.
به بيان ديگر، «استاندارد يونیكد» استاندارد جهانی كدگذاری كاركترهاست كه برای پردازش كامپيوتری متون به كار میرود. اين استاندارد همان كاراكترها و كدهای استاندارد ISO/IEC 10646 را داراست و كاملا با آن سازگار است. پس در واقع هر پيادهسازی سازگار با يونیكد، با ISO/IEC 10646 نيز سازگار است.
يونیكد امكان كدگذاری همه كاراكترهای مورد استفاده در نوشتن زبانهای دنيا را فراهم آوردهاست. اين استاندارد از كدگذاری 16بيتی استفاده میكند كه برای بيش از65000 نويسه (كاراكتر) جا فراهم میكند. اگر چه 65000 نويسه برای كدگذاری اكثر نويسههايی كه در زبانهای مهم دنيا استفاده میشود كافی است، با اين حال يونیكد شيوهگسترشی بهنام UTF-16 فراهمكردهاست كه امكان اضافهكردن حدود يك ميليون نويسه ديگر را نيز میدهد. اين دامنه برای كليه نويسههای عالم، از جمله پوشش كامل همه خطهای باستانی (همچون خط ميخی) نيز كافی است.
يونیكد برای كليه نويسههای مورد استفاده در زبانهای عمده دنيا كد تعيينكردهاست. بهعلت گستردهبودن فضای تخصيص نويسه، اين استاندارد بسياری از نمادهای لازم برای حروفچينی را نيز در بر گرفتهاست. از خطهای مورد پشتيبانی اين استاندارد میتوان به لاتين (دربرگيرنده اكثر زبانهای اروپايی)، سيريليك(روسی، صربی)، يونانی، عربی (شامل عربی، فارسی، اردو، كردی)، عبری، هندی، ارمنی، آسوری، چينی، كاتاكانا و هيراگانا(ژاپنی)، و هانگول (كرهای) اشارهكرد. بهعلاوه، تعداد زيادی نماد رياضی و فنی علائم نقطهگذاری، پيكان، و علامتهای متفرقهدر اين استاندارد وجود دارد. اين استاندارد برای علامتهای تركيبشونده يا اعرابها نيز كدهايی در نظر گرفتهاست كهاز جمله آنها علامتهايی چون «˜» (مد)هستند كه در تركيبب حروف پايه، حروف تغييرلحن يافتهای چون «ñ» را میسازند.
به طور كلی، بعضی از مشخصات يونیكد به شرح زير است:
نويسههای شانزده بيتی
يكیسازی (اختصاص يك كد به نويسههای مشترك در چند زبان مختلف)
نويسه، نه شكل (يك «ع»، و نه چهارتا: «ﻋ»، «ﻌ»، «ﻊ»، «ﻉ»)
بار معنايی (حرفبودن، مقدار عددی، ...)
در استاندارد يونیكد، نويسههای فارسی در بلوك مربوط بهخط عربی قرار دارند. اين بلوكبرای دربرگرفتن نويسههای زبانهايی كهاز خط عربیاستفادهمیكنند، مثل فارسی، اردو، پشتو، سندی، و كردی گسترش يافته است. اين بلوك نشانههای قرآنی از قبيل نشانههای سجده و پايان آيه، و علائم وقف را نيز در بردارد.
در يونیكد با وجود يكیسازی كدهای حروف مشترك، برای حروف فارسی كه بار معنايی يا نمايشی متفاوت با حروف عربی دارند، نويسههای جداگانه درنظر گرفتهشدهاست. يعنی كليه حروف خاص فارسی (پ، چ، ژ، گ) و نيز «ك» و «ی» فارسی كهبا حرف مشابهدر عربیتفاوت نمايشی دارند، مكانجداگانهای بهخود اختصاص دادهاند. كليه اعرابهای متداول حضور دارند و ميان شكلفارسی/اردو و عربی ارقام نيز بهعلت شكل و رفتار متفاوت، تفاوتهايی منظور گشتهاست.
از طرف ديگر، علائم نقطهگذاری چون نقطه و فاصله كهشكلی كسانیدر خطهای لاتين و عربی دارند، كد يكسان دارند. علائمیچون پرانتز نيز، بسته به جهت متن، آينهای میشوند، به طور مثال، نويسه 0028 نماينده «پرانتز باز» است، و نه«پرانتز سمتچپ». يونیكد اتصالمجازی و فاصله مجازی را نيز تحتنامهای «اتصال با عرضصفر» و «بیاتصالی با عرضصفر» بهرسميت میشناسد.
بدين ترتيب ملاحظه میشود كه برای حل مشكلات موجود، و نيز رفتن به سوی يك استاندارد مقبول و همهجانبه، استاندارد يونیكد، روشی مناسب به نظر میرسد. در شمارههای آتی ماهنامه نيز به اين موضوع از جنبههای ديگر خواهيم پرداخت.
اصطلاحات:
نويسه: در مقابل character. كوچكترين واحد متن. مثلاً يك حرف لاتين، يك اعراب فارسی، يكی علامت نقطهگذاری، يك نشانه بريل، يا يك نماد رياضی
شكل: در مقابل glyph. كوچكترين واحد نمايش متن. برای بعضی نويسهها مثل حروف فارسی و هندی ممكن است چند شكل موجود باشد. مثلاً « ﺑ » و « ﻊ » از اشكالنمايشی محسوب میشوند.
مجموعه نويسه: در مقابلcharacter set. مجموعهای از نويسهها كهبههر نويسه عددی اختصاصمیدهد كه نماينده آن نويسه محسوب میشود و در تبادل اطلاعات مورد استفادهقرار میگيرد.
مجموعه كد: در مقابل code page. سيستمی كه بههر نويسه دنباله مشخصیاز بايتها را متناظر میكند. مجموعهنويسهها میتوانند بهشكل يا چند مجموعه كد قابل استفادهباشند.
نگارش و گردآوری : علیرضا سجادی نیا !