الثلاثاء، ديسمبر 28، 2010

اليونيكود Unicode

صممت الحواسيب خصيصاً للتعامل مع الأرقام. ولكن مع مرور الوقت برزت الحاجة إلى التعامل مع الأحرف أيضاً لتخزين وطباعة الأسماء والعناوين. وليتم تمكين الحاسوب من التعامل مع الأحرف جاءت فكرة الرمز للأحرف باستخدام الأرقام. فالترميز إذاً يعني تعيين قيمة رقمية لكل حرف. ظهرت المئات من أنظمة الترميز المختلفة لكن لم تكن الواحدة منها كافية لتمثيل جميع الأحرف وعلامات الترقيم في اللغة الواحدة. بالإضافة إلى ذلك ظهرت مشاكل نتيجة تعارض الأنظمة مع بعضها كتعيين قيمة رقمية واحدة لحرفين مختلفين. أو تعيين قيمتين رقميتين مختلفتين لنفس الحرف. ولهذا كان الأمر يتطلب وجود أكثر من نظام ترميز واحد على الحاسب الواحد وخصوصاً الخوادم. ومع وجود أنظمة ترميز متعددة ومختلفة كانت البيانات المتنقلة بين المنصات المختلفة معرضة للتلف. وكحل لتلك الإشكاليات بدأ مشروع معيار الشفرة الموحدة عام 1988 بتعاون ممثلين من عدة شركات بهدف تطوير ترميز يدعم جميع أحرف لغات العالم. وفي عام 1991 أنشئت جمعية اليونيكود Unicode Consortium وتم نشر النسخة الأولى من معيار اليونيكود في أكتوبر عام 1991. فاليونيكود إذاً هو معيار عالمي يخصص لكل حرف رقم فريد رقم رمزيcode point بغض النظر عن اللغة المستخدمة. وتعتبر النسخة 6.0.0 أحدث نسخة لهذا المعيار. يتم ترتيب مجموعات الأحرف في اليونيكود على شكل كتل blocks. وتحتل الأحرف العربية في هذه النسخة الكتلة الواقعة بين 0600 و 06FF حيث تشتمل على الأبجدية العربية والحركات وحروف المد وعلامات الترقيم والعلامات القرآنية كالطاء الصغيرة المرتفعة والأحرف الإضافية المستخدمة في اللغات الأخرى كالفارسية والأذربيجانية. وللمزيد عن الأحرف العربية في اليونيكود يمكن الإطلاع على هذا الرابط http://unicode.org/charts/PDF/U0600.pdf .
عند استخدام اليونيكود يمكن للتطبيقات الاختيار بين عدة صيغ مثل: UTF-8 و UTF-16 و UTF-32. تعتبر صيغة الـ UTF-8 الأكثر استخداماً وخاصة في الـ HTML والبروتوكولات المشابهة. تتيح صيغة الـ UTF-8 تمثيل الرقم الرمزي باستخدام ما لا يقل عن بايت واحد «8 بت» ولا يزيد عن أربعة بايتات. على سبيل المثال يمكن تمثيل الحرف في اللغة العربية باستخدام 1.7 بايت بينما يحتاج الحرف في اللغة اليابانية والصينية والكورية إلى ثلاثة بايتات. فالرقم الظاهر في الاسم «UTF-8» يعني عدد البتات «bits» المستخدمة لتمثيل الرقم الرمزي الواحد. وبناءً على ذلك تتيح صيغة الـ UTF-16 تمثيل الرقم الرمزي باستخدام وحده أو وحدتين تخزينيتين مكونة من 16 بت. أما صيغة الـ UTF-32 فتستخدم وحدة تخزينية واحدة مكونة من 32 بت. يفضل استخدام صيغة الـ UTF-8 للغات الأوروبية بينما تعتبر صيغة الـ UTF-16 أفضل للغات الآسيوية.