UTF-32

UTF-32 ( تنسيق تحويل يونيكود 32 بت )، ويُسمى أحيانًا UCS-4، هو ترميز ثابت الطول يُستخدم لترميز نقاط ترميز يونيكود ، ويستخدم 32 بتًا (أربعة بايتات ) لكل نقطة ترميز (مع العلم أن عددًا من البتات البادئة يجب أن يكون صفرًا، نظرًا لأن عدد نقاط ترميز يونيكود أقل بكثير من 2 ^32 ، إذ لا يتطلب الأمر فعليًا سوى 21 بتًا). [ 1 ] في المقابل، جميع تنسيقات تحويل يونيكود الأخرى هي ترميزات متغيرة الطول. تمثل كل قيمة 32 بت في UTF-32 نقطة ترميز يونيكود واحدة، وهي تساوي تمامًا القيمة العددية لتلك النقطة.

تتمثل الميزة الرئيسية لترميز UTF-32 في فهرسة نقاط ترميز Unicode مباشرةً. فإيجاد النقطة رقم N في سلسلة من النقاط عمليةٌ تستغرق وقتًا ثابتًا . في المقابل، يتطلب الترميز ذو الطول المتغير وقتًا خطيًا لحساب N نقطة ترميز من بداية السلسلة. وهذا ما يجعل UTF-32 بديلًا بسيطًا في البرامج التي تستخدم أعدادًا صحيحة تُزاد بمقدار واحد لفحص كل موقع في السلسلة ، كما كان شائعًا في ASCII . غالبًا ما يُبالغ المبرمجون المبتدئون في تقدير مدى فائدة ذلك. [ 2 ]

تتمثل العيوب الرئيسية لترميز UTF-32 في عدم كفاءته في استخدام المساحة، حيث يستهلك أربعة بايتات لكل نقطة ترميز، بما في ذلك 11 بتًا قيمتها دائمًا صفر. تُعدّ الأحرف التي تتجاوز الحد الأدنى للرمز (BMP) نادرة نسبيًا في معظم النصوص (باستثناء، على سبيل المثال، النصوص التي تحتوي على بعض الرموز التعبيرية الشائعة)، ويمكن تجاهلها عادةً عند تقدير حجم الملف. هذا يجعل حجم UTF-32 يقارب ضعف حجم UTF-16 . وقد يصل حجمه إلى أربعة أضعاف حجم UTF-8 اعتمادًا على عدد الأحرف الموجودة في مجموعة ASCII الفرعية. [ 3 ]

تاريخ

يُعرّف معيار ISO/IEC 10646 الأصلي شكل ترميز 32 بت يُسمى UCS-4 ، حيث يُمثَّل كل رمز في مجموعة الأحرف العالمية (UCS) بقيمة 31 بت تتراوح من 0 إلى 0x7FFFFFFF (بت الإشارة غير مستخدم وقيمته صفر). في نوفمبر 2003، قُيِّد ترميز يونيكود بموجب RFC  3629 ليتوافق مع قيود ترميز UTF-16 : حيث مُنع صراحةً استخدام رموز أكبر من U+10FFFF (وكذلك الرموز البديلة العليا والدنيا من U+D800 إلى U+DFFF). تُعرِّف هذه المجموعة الفرعية المحدودة ترميز UTF-32. [ 4 ] [ 1 ] على الرغم من أن معيار ISO (اعتبارًا من عام 1998 في Unicode 2.1) كان قد خصص النطاقين 0xE00000 إلى 0xFFFFFF، و0x60000000 إلى 0x7FFFFFFF للاستخدام الخاص، [ 5 ] فقد أُزيلت هذه النطاقات في الإصدارات اللاحقة. ولأن وثيقة المبادئ والإجراءات الصادرة عن اللجنة الفنية المشتركة 1/اللجنة الفرعية 2 التابعة لـ ISO/IEC تنص على أن جميع التعيينات المستقبلية لنقاط الترميز ستقتصر على نطاق Unicode، فإن UTF-32 سيكون قادرًا على تمثيل جميع نقاط ترميز UCS، وUTF-32 وUCS-4 متطابقان. [ 6 ]

فائدة العرض الثابت

يتمتع تحديد عدد ثابت من البايتات لكل نقطة ترميز بمزايا نظرية، ولكن لكل منها مشاكل في الواقع:

  • يصبح الاقتطاع أسهل، لكن ليس بشكل ملحوظ مقارنةً بـ UTF-8 و UTF-16 (حيث يمكن لكليهما البحث عكسيًا عن نقطة الاقتطاع بالنظر إلى 2-4 وحدات ترميز على الأكثر). [ أ ]
  • إيجاد الحرف رقم N في سلسلة نصية. يُعدّ إيجاد رمز الحرف رقم N مسألةً من رتبة O(1) ، بينما هو مسألة من رتبة O(n) في ترميز ذي عرض متغير. مع ذلك، فإن ما قد يُطلق عليه المستخدم "حرفًا" يظل ذا عرض متغير، [ 3 ] فعلى سبيل المثال، سلسلة الأحرف المركبة á تتكون من رمزين، والرمز التعبيري 👨‍🦲 من ثلاثة رموز، [ 7 ] والحرف المركب من رمز واحد.
  • معرفة "عرض" السلسلة بسرعة. ومع ذلك، حتى الخطوط "ذات العرض الثابت" لها عرض متغير، وغالبًا ما تكون الأحرف الصينية واليابانية والكورية ضعف العرض، [ 2 ] بالإضافة إلى المشكلات المذكورة سابقًا المتعلقة بعدم تساوي عدد نقاط الترميز مع عدد الأحرف.

يستخدم

يُستخدم ترميز UTF-32 بشكل أساسي في واجهات برمجة التطبيقات الداخلية حيث تكون البيانات عبارة عن نقاط ترميز أو رموز رسومية مفردة ، بدلاً من سلاسل الأحرف. على سبيل المثال، في عرض النصوص الحديث، من الشائع أن تكون الخطوة الأخيرة هي إنشاء قائمة من البنى، تحتوي كل منها على إحداثيات (س، ص) ، وخصائص، ونقطة ترميز UTF-32 واحدة تُحدد الرمز الرسومي المراد رسمه. غالبًا ما تُخزن المعلومات غير المتوافقة مع ترميز Unicode في البتات الـ 11 "غير المستخدمة" من كل كلمة.

يكاد استخدام سلاسل UTF-32 في نظام ويندوز (حيث يكون نوع البيانات wchar_t مكونًا من 16 بت) يكون معدومًا. أما في أنظمة يونكس، فتُستخدم سلاسل UTF-32 أحيانًا، ولكن نادرًا، داخليًا بواسطة التطبيقات، نظرًا لأن نوع البيانات wchar_t مُعرَّف على أنه مكون من 32 بت.

يُحظر استخدام ترميز UTF-32 كأحد ترميزات الأحرف في لغة HTML. [ 8 ] [ 9 ]

لغات البرمجة

يمكن تجميع إصدارات بايثون حتى 3.2 لاستخدام سلاسل UTF-32 بدلاً من UTF-16 ؛ بدءًا من الإصدار 3.3، تُخزَّن سلاسل يونيكود بتنسيق UTF-32 إذا احتوت السلسلة على حرف واحد على الأقل غير BMP ، مع تحسين إزالة البايتات الصفرية البادئة "اعتمادًا على [نقطة الترميز] ذات أكبر ترتيب يونيكود (1 أو 2 أو 4 بايت)" لجعل جميع نقاط الترميز بهذا الحجم. [ 10 ]

تخلت لغة البرمجة جوليا عن دعم ترميز UTF-32 المدمج مع إصدارها 1.0، مما بسّط اللغة لتقتصر على سلاسل UTF-8 فقط (مع اعتبار جميع الترميزات الأخرى قديمة ونقلها من المكتبة القياسية إلى حزمة [ 11 ] ) وذلك تماشياً مع "بيان UTF-8 في كل مكان". [ 12 ]

يحتوي C++11 على نوعين من البيانات المدمجة التي تستخدم ترميز UTF-32. char32_tيخزن النوع الأول حرفًا واحدًا بترميز UTF-32، بينما u32stringيخزن النوع الثاني سلسلة من الأحرف المشفرة بهذا الترميز. يُشار إلى الحرف أو السلسلة النصية المشفرة بترميز UTF-32 بعلامة Uقبل الحرف أو السلسلة النصية. [ 13 ] [ 14 ]

#include <string> char32_t UTF32_character = U '🔟' ; // تُكتب أيضًا كـ U'\U0001F51F' std :: u32string UTF32_string = U "UTF-32-encoded string" ; // مُعرّفة كـ `const char32_t*´

تحتوي لغة C#UTF32Encoding على فئة تمثل أحرف Unicode كبايتات، بدلاً من كونها سلسلة نصية. [ 15 ]

المتغيرات

على الرغم من عدم صلاحيتها تقنيًا، غالبًا ما يتم ترميز الأجزاء البديلة والسماح بها. يسمح هذا بتحويل ترميز UTF-16 غير الصالح (مثل أسماء ملفات ويندوز) إلى UTF-32، على غرار آلية عمل ترميز WTF-8 المشتق من UTF-8. في بعض الأحيان، يتم ترميز الأجزاء البديلة المزدوجة بدلًا من الأحرف غير المتوافقة مع BMP، كما هو الحال في CESU-8 . نظرًا للعدد الكبير من القيم غير المستخدمة ذات 32 بت، من الممكن أيضًا الحفاظ على ترميز UTF-8 غير الصالح باستخدام قيم غير يونيكود لترميز أخطاء UTF-8، مع العلم أنه لا يوجد معيار موحد لهذا الغرض.

يحتوي ترميز UTF-32 على إصدارين للترتيب الكبير والترتيب الصغير: UTF-32-BE و UTF-32-LE .

انظر أيضاً

ملحوظات

  1. بالنسبة لترميز UTF-8: حدد نقطة الاقتطاع. إذا كانت البايتة التي تسبقها من 0 إلى 0x7F، أو البايتة التي تليها أي بايتة أخرى غير بايتات الاستمرار من 0x80 إلى 0xBF، فيمكن اقتطاع السلسلة عند تلك النقطة. وإلا، فابحث حتى 3 بايتات للخلف عن هذه النقطة واقتطع عندها. إذا لم يتم العثور عليها، فاقتطع عند الموضع الأصلي. يعمل هذا حتى في حالة وجود أخطاء في ترميز UTF-8. أما ترميز UTF-16 فهو بسيط، ولا يتطلب سوى الرجوع كلمة واحدة على الأكثر.

مراجع

  1. 1 2 كونستابل، بيتر (13-06-2001). "ربط نقاط الترميز بأشكال ترميز يونيكود" . أنظمة الحوسبة والكتابة - SIL International . تم الاسترجاع في 03-10-2022 .
  2. 1 2 غوريغاوكار، مانيش (14 يناير 2017). "دعونا نتوقف عن إضفاء معنى على نقاط الترميز" . في البحث عن الكسل . تم الاسترجاع في 14 يونيو 2020. بدأ الناس يلمحون إلى أن نقاط الترميز لها معنى، وأن فهرسة أو تقطيع O(1) عند حدود نقاط الترميز عملية مفيدة.
  3. 1 2 "الأسئلة الشائعة - UTF-8، UTF-16، UTF-32 وBOM" . يونيكود . تم الاسترجاع في 4 سبتمبر 2022 .
  4. "المعايير المتاحة للعموم - ISO/IEC 10646:2020" . معايير ISO . تاريخ الاسترجاع : 12 أكتوبر 2021. البند 9.4: "نظرًا لأن نقاط الترميز البديلة ليست قيمًا عددية في نظام الترميز الموحد (UCS)، فإن وحدات ترميز UTF-32 في النطاق 0000 D800-0000 DFFF غير صحيحة". البند 4.57: "[مساحة ترميز UCS] تتكون من الأعداد الصحيحة من 0 إلى 10 FFFF (سداسي عشري)". البند 4.58: "[قيمة عددية في نظام الترميز الموحد (UCS)] أي نقطة ترميز في نظام الترميز الموحد (UCS) باستثناء نقاط الترميز البديلة العليا والدنيا".
  5. "الملحق ب - مجموعة الأحرف العالمية (UCS)" . توحيد معايير DKUUG . مؤرشف من الأصل في 22 يناير 2022. تم الاسترجاع في 3 أكتوبر 2022 .
  6. "ج.2 أشكال الترميز في معيار ISO/IEC 10646" (ملف PDF) . معيار يونيكود، الإصدار 6.0 . ماونتن فيو، كاليفورنيا: اتحاد يونيكود . فبراير 2011. ص 573. ISBN  978-1-936213-01-6. يتم التعامل مع [UCS-4] الآن ببساطة كمرادف لـ UTF-32، ويعتبر الشكل المتعارف عليه لتمثيل الأحرف في 10646.
  7. "👨‍🦲 رجل: رمز تعبيري أصلع" . إيموجيبيديا . تم الاسترجاع في 12-10-2021 .
  8. "معيار HTML" . html.spec.whatwg.org . تم الاطلاع عليه بتاريخ 11-11-2024 .
  9. "اختيار وتطبيق تشفير الحروف" . www.w3.org (باللغة الفرنسية) . تم الاسترجاع 2024-11-11 .
  10. لويس، مارتن. "PEP 393 -- تمثيل السلاسل المرن" . python.org . بايثون . تم الاطلاع عليه بتاريخ 26 أكتوبر 2014 .
  11. JuliaStrings/LegacyStrings.jl: أنواع سلاسل Unicode القديمة ، JuliaStrings، 17 مايو 2019 ، تم الاطلاع عليه بتاريخ 15 أكتوبر 2019
  12. "UTF-8 في كل مكان" . utf8everywhere.org .
  13. "u32string" . cplusplus.com . تم الاطلاع عليه بتاريخ 12-11-2024 .
  14. "String literal - cppreference.com" . en.cppreference.com . تم الاطلاع عليه بتاريخ 14 نوفمبر 2024 .
  15. dotnet-bot. "فئة ترميز UTF32 (System.Text)" . learn.microsoft.com . تم الاطلاع عليه بتاريخ 27-11-2024 .