ASCII ويونيكود: ما هما وفيمَ يُستخدمان

الحاسوب لا يفهم إلا الأرقام، لذلك كل حرف تراه على الشاشة هو رمز رقمي. كان ASCII أول جدول رموز صار معياراً، ويونيكود هو الذي نستخدمه اليوم للكتابة بأي لغة. هنا ترى كيف يعملان وما الرموز التي يفيد أن تعرفها، ولماذا تظهر أحياناً رموز غريبة بدل الحروف المعلَّمة، وكيف تراجع كل شيء في الجدول.

آخر تحديث:

ما هو ترميز الحروف

الترميز اتفاق: «الرقم 65 يعني الحرف A». حين تكتب نصاً يحفظ البرنامج تلك الأرقام؛ وحين يفتحه شخص آخر يعيد برنامجه ترجمتها إلى حروف بالاتفاق نفسه. فإذا لم يستخدم الطرفان الجدول نفسه يخرج النص مشوّهاً.

يجب التمييز بين فكرتين. الأولى مجموعة الرموز، أي قائمة الأرقام المقابلة لكل رمز. والثانية كيفية حفظ تلك الأرقام في بايتات. في ASCII تتطابق الفكرتان بشكل بديهي؛ أما في يونيكود فلا، وهنا يأتي دور UTF-8.

ASCII: 128 رمزاً من 7 بتات

ASCII (اختصار American Standard Code for Information Interchange) صار معياراً في ستينيات القرن العشرين. يستخدم 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. فالآلات البرقية القديمة كانت تحتاج إلى أمرين مختلفين: إعادة العربة إلى البداية وتقديم الورق سطراً.

هذا الاختلاف هو سبب ملفات تظهر كلها في سطر واحد في محرر بسيط، أو برمز غريب في نهاية كل سطر. وإن أردت معرفة رمز كل منهما فاكتب LF أو CR في خانة البحث في جدول ASCII.

«ASCII الموسّع» ليس معياراً

بما أن البايت 8 بتات وASCII لا يستخدم إلا 7، بقيت 128 رمزاً حرة (من 128 إلى 255) وملأها كل مصنّع وكل منطقة على طريقتها. يُعرف ذلك بـ«ASCII الموسّع»، لكن لا يوجد جدول واحد: هناك جداول كثيرة تسمى صفحات الرموز. ومن أشهرها Latin-1 (ISO-8859-1)، حيث الحرف é هو الرمز 233، وWindows-1252 المشابهة لكن مع فروق في الرموز من 128 إلى 159 (وفيها مثلاً اليورو).

المشكلة أن الرمز 233 يعني «é» في جدول وشيئاً آخر في جدول آخر. فكان النص المكتوب بجدول والمقروء بآخر يظهر مشوّهاً. وُلد يونيكود لإنهاء هذه الفوضى.

يونيكود وUTF-8

يمنح يونيكود رقماً فريداً، يسمى نقطة الرمز، لكل حرف في كل أنظمة الكتابة تقريباً في العالم، إضافة إلى الرموز والإيموجي. وفيه اليوم أكثر من 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 هو «±». والنتيجة: «Ã±». ويحدث الشيء نفسه مع «é» التي تظهر «Ã©»، ومع «café» التي تظهر «café».

الحل غالباً هو أن تطلب من البرنامج فتح الملف بترميز 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، مثل ñ، تنبّه الأداة وتعرض رمزها في يونيكود. ولرؤية البايتات الفعلية في UTF-8 استعمل «من نص إلى ثنائي»: الحرف ñ يعطي 11000011 10110001، أي بايتين من 8 بتات. الحدود: الجدول يعرض ASCII القياسي فقط لا الموسّع، وكل شيء يُحسب في متصفحك دون إرسال النص إلى أي خادم.

الأسئلة الشائعة

كم رمزاً في ASCII؟

128، برموز من 0 إلى 127 وبـ7 بتات لكل منها. منها 33 رمز تحكم و95 قابلة للطباعة، مع احتساب المسافة.

ما رمز ASCII للحرف A وللحرف a؟

الحرف «A» هو 65 (41 بالسداسي عشري و01000001 بالثنائي) والحرف «a» هو 97 (61 بالسداسي عشري و01100001 بالثنائي). ويختلفان دائماً بمقدار 32.

ما الفرق بين ASCII ويونيكود؟

ASCII فيه 128 رمزاً مصمماً للإنجليزية. ويونيكود فيه أكثر من 150,000 رمز من أغلب اللغات والإيموجي، ورموزه الـ128 الأولى هي نفسها رموز ASCII.

ما هو UTF-8؟

هو الطريقة الأكثر استعمالاً لحفظ نص يونيكود في بايتات. يستخدم من 1 إلى 4 بايتات لكل رمز: رموز ASCII تشغل بايتاً واحداً، والحرف ñ بايتين، والإيموجي أربعة.

لماذا يعرض نصي «Ã±» أو «Ã©»؟

لأن نصاً محفوظاً بـUTF-8 يُقرأ على أنه Latin-1. افتح الملف مع تحديد ترميز UTF-8 فتُحل المشكلة.