تحويل النص إلى ثنائي
تحويل النصوص والرموز إلى بايتات ثنائية بالنظام الثنائي.
عند تحويل الحرف A إلى النظام الثنائي، ستحصل على ثماني خانات مرتبة: 01000001. لكن إذا قمت بتحويل رمز تعبيري بالطريقة ذاتها، فستكون النتيجة أطول بأربع مرات، لأن ترميز UTF-8 صُمم ليستوعب أنظمة الكتابة العالمية بدلاً من الاقتصار على 7 بتات التي بُني عليها معيار ASCII القديم.
حرف واحد وثمانية بتات في تحويل النصوص
يمتلك الحرف A الرمز العشري 65 في جدول ASCII. في النظام الثنائي، يُكتب هذا الرقم على شكل 01000001؛ فإذا حسبت الخانات من اليمين إلى اليسار، ستجد قيم البتات هي 1 و2 و4 و8 و16 و32 و64 و128، وبجمع 64 مع 1 ينتج 65. النصوص المخزنة رقمياً هي مجرد سلسلة متتالية من مجموعات البايت هذه.
أما الحرف الصغير a ذو القيمة 97، فيُكتب ثنائياً كـ 01100001. هذا النمط هو نفس تمثيل A مع تفعيل بت إضافي واحد قيمته 32، وهو الأساس التقني لفرق 32 موضعاً الثابت بين كل حرف كبير وصغير.
علاقة معيار ASCII بنظام UTF-8 ثنائياً
صُمم نظام UTF-8 عمداً لتكون أول 128 خانة فيه متطابقة تماماً مع معيار ASCII بايت مقابل بايت، حيث يمثل كل حرف بايت واحد يبدأ دائماً بالصفر 0. لهذا السبب يظهر النص الإنجليزي العادي بالطريقة نفسها تماماً في الحالتين.
بعد الرمز 127، ينتقل ترميز UTF-8 إلى سلاسل متعددة البايت بأنماط بتات محددة: البايت الأول الذي يبدأ بـ 110 يشير إلى محرف ثنائي البايت، و1110 يشير إلى ثلاثة بايتات، بينما 11110 يشير إلى أربعة بايتات. وكل بايت تالٍ يبدأ بالقيمة 10، مما يتيح للبرمجيات تمييز بايت المتابعة عن بداية الحرف الجديد.
مثال عملي لمحرف متعدد البايت في المحول
لنأخذ الحرف é برمز يونيكود 233. لا يمكن احتواء هذا الحرف في بايت واحد، لذا يشفر بواسطة UTF-8 في بايتين: 11000011 10101001، وهو ما يكتب بالنظام الست عشري C3 A9. البادئة 110 تحدد تسلسلاً من بايتين، وتتبعها 10 لتدل على بايت الاستمرار.
أما الرموز التعبيرية فتتطلب مساحة أكبر، وغالباً ما تستهلك البايتات الأربعة الكاملة المسموح بها في UTF-8 مع بايت استهلالي يبدأ بـ 11110. وهذا هو التفسير المباشر لكون الإيموجي أثقل حجماً عند قياس البايتات مقارنة بالحروف البسيطة.
أسباب تشوه النصوص عند التحويل باقتصار على ASCII
- لا يحتوي نظام ASCII على أي رموز تتجاوز الرقم 127، لذا يعجز عن تمثيل الحروف المشكولة أو الرموز التعبيرية.
- عند قراءة بايت تلو الآخر دون مراعاة تشفير UTF-8، تتفكك المحارف متعددة البايت وتتحول إلى رموز غريبة ومقطوعة.
- هذا الخلل في التفكيك هو المسبب الفعلي لمشكلة mojibake الشائعة، حيث ينقلب النص المقروء إلى علامات استفهام أو رموز مشوهة.
أسئلة شائعة حول تحويل النصوص إلى النظام الثنائي
كم عدد البتات التي يستهلكها الحرف الواحد؟
يستخدم محرف ASCII العادي 8 بتات أي بايت واحد. أما في نظام UTF-8، فقد يحتاج الحرف خارج هذا النطاق إلى بايتين أو 3 أو 4 بايتات، أي 16 أو 24 أو 32 بت حسب نطاق اليونيكود.
لماذا يمثل الحرف A بالتسلسل الثنائي 01000001؟
لأن الحرف A أُعطي القيمة العشرية 65 في معيار ASCII الأصلي الصادر عام 1963، والعدد 65 ثنائياً هو 01000001 بحساب 64 زائد 1 اعتماداً على أوزان البتات 1 و2 و4 و8 و16 و32 و64 و128.
هل يتسبب تحويل النص إلى ثنائي في فقدان أي بيانات؟
لا، لا تفقد أي بيانات طالما أن نظام التشفير محدد ومتطابق، فالنظام الثنائي مجرد تمثيل مختلف لقيم البايتات نفسها.
لماذا تعرض بعض الأدوات 7 بتات وأخرى 8 بتات؟
احتاج معيار ASCII الأصلي إلى 7 بتات فقط لتمثيل 128 رمزاً، ولكن بما أن الأنظمة تخزن البيانات في بايتات من 8 بت، يُضاف صفر في البداية ليكتمل البايت.
هل يمكن استعادة النص الأصلي من السلسلة الثنائية؟
نعم، يمكن ذلك عن طريق تقسيم النص الثنائي إلى مجموعات من 8 بتات، وتحويل كل مجموعة إلى قيمتها العشرية ثم إلى الحرف المقابل بشرط معرفة التشفير المعتمد.