علامة ترتيب البايت
علامة ترتيب البايت ( BOM ) هي استخدام خاص لرمز حرف Unicode الخاص، U+FEFF ZERO WIDTH NO-BREAK SPACE ، والذي يمكن أن يشير ظهوره كرقم سحري في بداية دفق نصي إلى عدة أشياء لبرنامج يقرأ النص: [ 1 ]
- ترتيب البايتات، أو ترتيب البايتات ، لتدفق النص في حالات التشفير 16 بت و 32 بت؛
- حقيقة أن ترميز دفق النص هو Unicode، بدرجة عالية من الثقة؛
- ما هو ترميز الأحرف المستخدم في نظام يونيكود؟
يُعد استخدام BOM اختياريًا. ويتعارض وجوده مع استخدام UTF-8 بواسطة البرامج التي لا تتوقع وجود بايتات غير ASCII في بداية الملف، ولكنها قادرة على التعامل مع دفق النص بطريقة أخرى.
يمكن ترميز يونيكود بوحدات من الأعداد الصحيحة 8 بت، أو 16 بت، أو 32 بت. بالنسبة لتمثيلات 16 بت و32 بت، يحتاج الحاسوب الذي يستقبل نصًا من مصادر مختلفة إلى معرفة ترتيب البايتات المُرمّزة للأعداد الصحيحة. يصبح مُعرّف علامة ترتيب البايتات (BOM) نقطة ترميز يونيكود غير حرفية إذا تم تبديل بايتاته. وبالتالي، يمكن للعملية التي تصل إلى النص فحص هذه البايتات القليلة الأولى لتحديد ترتيب البايتات، دون الحاجة إلى أي اتفاقية أو بيانات وصفية خارج دفق النص نفسه. عمومًا، سيقوم الحاسوب المُستقبِل بتبديل البايتات إلى ترتيب البايتات الخاص به، إذا لزم الأمر، ولن يحتاج إلى مُعرّف علامة ترتيب البايتات (BOM) للمعالجة.
يختلف تسلسل البايتات في علامة ترتيب البايتات (BOM) باختلاف ترميز يونيكود (بما في ذلك UTF-8 والترميزات الأخرى مثل UTF-7 ، انظر الجدول أدناه )، ومن غير المرجح أن يظهر أي من هذه التسلسلات في بداية تدفقات النصوص المخزنة بترميزات أخرى. لذلك، فإن وضع علامة ترتيب البايتات المشفرة في بداية تدفق نصي يُشير إلى أن النص مُشفّر بنظام يونيكود، ويُحدد نظام الترميز المُستخدم. يُطلق على هذا الاستخدام لعلامة ترتيب البايتات اسم "توقيع يونيكود".
الاستخدام
علامة ترتيب البايتات (BOM) هي ببساطة رمز يونيكود U+FEFF (مسافة بدون كسر، عرض صفري) ، مُشفّرة بالترميز الحالي. يشير ملف نصي يبدأ بهذه البايتات إلى أن الملف مُشفّر بنظام UTF-16 ذي ترتيب البايتات الكبير. [ 2 ]FE FF
يُستخدم اسم ZWNBSP ( مسافة صفرية العرض غير قابلة للكسر ) إذا ظهرت علامة BOM في منتصف تدفق البيانات. ينصّ يونيكود على أنه يجب تفسيره كرمز عادي (أي رابط كلمات )، وليس كعلامة BOM. منذ إصدار يونيكود 3.2، تمّ التخلي عن هذا الاستخدام لصالح U+2060 رابط الكلمات . [ 1 ]
اسم Unicode 1.0 لهذا الرمز هو أيضًا BYTE ORDER MARK. [ 3 ]
UTF-8
تمثيل UTF -8 لعلامة BOM هو تسلسل البايت ( السداسي العشري ) .EF BB BF
يسمح معيار يونيكود باستخدام علامة ترتيب البايتات (BOM) في ترميز UTF-8 ، [ 4 ] ولكنه لا يشترط استخدامها أو يوصي به. [ 5 ] يتميز ترميز UTF-8 بترتيب بايتات ثابت، [ 6 ] لذا فإن استخدامها الوحيد فيه هو الإشارة في البداية إلى أن دفق النص مُرمّز بترميز UTF-8، أو أنه تم تحويله إلى UTF-8 من دفق يحتوي على علامة ترتيب بايتات اختيارية. كما لا يوصي المعيار بإزالة علامة ترتيب البايتات عند وجودها، وذلك لتجنب فقدان المعلومات أثناء عملية التحويل بين الترميزات، ولضمان استمرار عمل التعليمات البرمجية التي تعتمد عليها. [ 7 ] [ 8 ] توصي فرقة عمل هندسة الإنترنت (IETF) بأنه إذا كان البروتوكول (أ) يستخدم ترميز UTF-8 دائمًا، أو (ب) لديه طريقة أخرى للإشارة إلى الترميز المستخدم، فإنه "ينبغي عليه منع استخدام U+FEFF كتوقيع". [ 9 ] ومن الأمثلة على عدم اتباع هذه التوصية بروتوكول IETF Syslog الذي يشترط أن يكون النص بتنسيق UTF-8 ويشترط أيضًا استخدام BOM. [ 10 ]
عدم استخدام علامة ترتيب البايتات (BOM) يسمح بأن يكون النص متوافقًا مع الإصدارات السابقة من البرامج المصممة لـ ASCII الموسع . على سبيل المثال، تسمح العديد من لغات البرمجة باستخدام بايتات غير ASCII في السلاسل النصية ، ولكن ليس في بداية الملف.
لا يُعدّ وجود علامة ترتيب البايتات (BOM) ضروريًا للكشف عن ترميز UTF-8. يُعدّ UTF-8 ترميزًا متفرقًا: إذ إنّ نسبة كبيرة من تركيبات البايتات الممكنة لا تُنتج نصًا صالحًا بترميز UTF-8. من المرجح أن تحتوي البيانات الثنائية والنصوص بأي ترميز آخر على تسلسلات بايتات غير صالحة كـ UTF-8، لذا فإنّ وجود مثل هذه التسلسلات غير الصالحة يُشير إلى أنّ الملف ليس UTF-8، بينما يُعدّ غياب التسلسلات غير الصالحة مؤشرًا قويًا جدًا على أنّ النص UTF -8. عمليًا، الاستثناء الوحيد هو النص الذي يحتوي على بايتات من نطاق ASCII فقط، إذ قد يكون هذا ترميزًا غير ASCII ذي 7 بتات، ولكن هذا غير مرجح في أي بيانات حديثة، وحتى في هذه الحالة يكون الفرق عن ASCII طفيفًا (مثل تغيير '\' إلى '¥').
تتعامل مُجمّعات ومُفسّرات مايكروسوفت [ 11 ] ، والعديد من البرامج على نظام مايكروسوفت ويندوز، مثل المفكرة (قبل إصدار ويندوز 10 رقم 1903 [ 12 ] )، مع علامة ترتيب البايتات (BOM) كرقم سحري إلزامي بدلاً من استخدام طرق استدلالية. تُضيف هذه الأدوات علامة ترتيب البايتات عند حفظ نص بتنسيق UTF-8، ولا يُمكنها تفسير UTF-8 إلا بوجود علامة ترتيب البايتات أو إذا كان الملف يحتوي على ASCII فقط. يُضيف ويندوز باور شيل (حتى الإصدار 5.1) علامة ترتيب البايتات عند حفظ مستندات XML بتنسيق UTF-8. مع ذلك، أضاف باور شيل كور 6 -Encodingخيارًا في بعض أوامر cmdlets يُسمى utf8NoBOM، ما يسمح بحفظ المستند بدون علامة ترتيب البايتات. كما يُضيف جوجل دوكس علامة ترتيب البايتات عند تحويل مستند إلى ملف نصي عادي للتنزيل.
UTF-16
في ترميز UTF-16 ، يمكن وضع علامة ترتيب البايتات (BOM U+FEFF) كأول بايتات في ملف أو سلسلة أحرف للإشارة إلى ترتيب البايتات (ترتيب البايتات) لجميع وحدات الترميز ذات 16 بت في الملف أو السلسلة. إذا تمت محاولة قراءة هذه السلسلة بترتيب بايتات خاطئ، فسيتم تبديل البايتات، مما ينتج عنه الحرف □ U+FFFE، الذي يُعرّفه يونيكود بأنه " حرف غير موجود " ولا ينبغي أن يظهر في النصوص.
- إذا تم تمثيل الوحدات ذات 16 بت بترتيب البايتات الكبير (UTF-16BE)، فإن BOM هو تسلسل البايتات ( السداسي العشري ).
FE FF - إذا كانت وحدات 16 بت تستخدم ترتيب النهاية الصغرى ("UTF-16LE")، فإن BOM هو تسلسل البايتات ( السداسي العشري ).
FF FE
بالنسبة لمجموعات الأحرف المسجلة لدى IANA UTF-16BE و UTF-16LE، لا ينبغي استخدام علامة ترتيب البايت لأن أسماء مجموعات الأحرف هذه تحدد بالفعل ترتيب البايت.
تنص الفقرة D98 من معيار المطابقة (القسم 3.10) لمعيار يونيكود على ما يلي: "قد يبدأ نظام ترميز UTF-16 بعلامة ترتيب البايتات (BOM) أو لا يبدأ بها. ومع ذلك، في حال عدم وجود علامة ترتيب البايتات، وفي غياب بروتوكول أعلى مستوى، يكون ترتيب البايتات في نظام ترميز UTF-16 هو ترتيب البايتات الكبير (Big-Endian)". ويخضع تطبيق بروتوكول أعلى مستوى للتأويل. فعلى سبيل المثال، يمكن القول ضمنيًا أن الملفات المحلية على جهاز كمبيوتر، والتي يكون ترتيب البايتات الأصلي فيها هو ترتيب البايتات الصغير (Little-Endian)، مُرمّزة بنظام UTF-16LE. ولذلك، يُتجاهل افتراض ترتيب البايتات الكبير (Big-Endian) على نطاق واسع. ويحدد معيار الترميز W3C / WHATWG المستخدم في HTML5 أن المحتوى المُصنّف إما "utf-16" أو "utf-16le" يُفسّر على أنه ترتيب البايتات الصغير (Little-Endian) "للتعامل مع المحتوى المنشور". [ 13 ] مع ذلك، إذا وُجدت علامة ترتيب البايتات، فيجب التعامل مع هذه العلامة على أنها "أكثر موثوقية من أي شيء آخر". [ 14 ]
بدون علامة ترتيب البايتات (BOM)، يظل من الممكن إلى حد كبير تحديد ما إذا كان النص بتنسيق UTF-16 وترتيب البايتات فيه إذا كان النص طويلاً بما يكفي. تحتوي الأحرف في كتلة الأحرف اللاتينية الأساسية (من U+0001 إلى U+007F) على بايت NUL (0x00) في الأعلى؛ حتى في النصوص غير اللاتينية، تُستخدم نهايات الأسطر والمسافات (المضمنة في هذه الكتلة) بشكل متكرر. إذا كانت بايتات NUL أكثر شيوعًا عند الإزاحات الزوجية في الملف، فمن المرجح أن يكون النص بتنسيق UTF-16 ذي ترتيب البايتات الكبير، وإذا كانت أكثر شيوعًا عند الإزاحات الفردية، فمن المرجح أن يكون بتنسيق UTF-16 ذي ترتيب البايتات الصغير.
UTF-32
على الرغم من إمكانية استخدام علامة ترتيب البايتات (BOM) مع ترميز UTF-32 ، إلا أن هذا الترميز نادرًا ما يُستخدم في الإرسال. وفيما عدا ذلك ، تُطبق نفس قواعد ترميز UTF-16 .
تتشابه علامة ترتيب البايتات (BOM) لترميز UTF-32 ذي الترتيب الصغير مع علامة ترتيب البايتات لترميز UTF-16 ذي الترتيب الصغير، متبوعةً بحرف NUL الخاص بترميز UTF-16، وهو مثال نادر على تشابه علامة ترتيب البايتات في ترميزين مختلفين. يتعين على المبرمجين الذين يستخدمون علامة ترتيب البايتات لتحديد الترميز تحديد أيهما أكثر احتمالاً: UTF-32 أم UTF-16 مع الحرف NUL في البداية. يسهل اكتشاف UTF-32 بدون علامة ترتيب البايتات لأن كل بايت رابع يكون NUL.
علامات ترتيب البايتات عن طريق الترميز
يوضح هذا الجدول كيفية تمثيل BOM كسلسلة بايت في ترميزات مختلفة وكيف يمكن أن تظهر هذه التسلسلات في محرر نصوص يفسر كل بايت كترميز قديم ( Windows-1252 مع تدوين الإقحام لعناصر التحكم C0 ):
| التشفير | التمثيل ( السداسي العشري ) | التمثيل ( العشري ) | تم تفسير البايتات على أنها Windows-1252 |
|---|---|---|---|
| UTF-8 [ أ ] | EF BB BF | 239 187 191 | أنا" |
| UTF-16 ( BE ) | FE FF | 254 255 | خاصتك |
| UTF-16 ( LE ) | FF FE | 255 254 | ÿþ |
| UTF-32 (BE) | ٠٠ ٠٠ FE FF | 0 0 254 255 | ^@ ^@þÿ |
| UTF-32 (LE) | FF FE 00 00 | 255 254 0 0 | ÿþ^@^@ |
| UTF-7 [ أ ] | 2B 2F 76 [ b ] [ 16 ] [ 17 ] | 43 47 118 | +/v |
| UTF-1 [ أ ] | F7 64 4C | 247 100 76 | ÷dL |
| UTF-EBCDIC [ أ ] | DD 73 66 73 | 221 115 102 115 | Ýsfs |
| جامعة ولاية سانت كلاود [ أ ] | 0E FE FF [ c ] | 14 254 255 | ^N þÿ |
| BOCU-1 [ أ ] | FB EE 28 | 251 238 40 | ûî( |
| GB18030 [ أ ] | 84 31 95 33 | 132 49 149 51 | 1•3 |
- ١ ٢ ٣ ٤ ٥ ٦ ٧ لا يُعدّ هذا حرفيًا علامة "ترتيب البايتات"، إذ أن وحدة الترميز في هذه الترميزات هي بايت واحد، وبالتالي لا يمكن أن تحتوي على بايتات بترتيب "خاطئ". مع ذلك، يمكن استخدام علامة ترتيب البايتات للإشارة إلى ترميز النص الذي يليها. [ ٦ ] [ ١٥ ]
- ↑ متبوعًا بـ
38،39،2B، أو2F(ASCII8،9،+أو/)، اعتمادًا على الحرف التالي. - ↑ يسمح SCSU بترميزات أخرى لـ U+FEFF، والشكل الموضح هو التوقيع الموصى به في UTR #6. [ 18 ]
انظر أيضاً
- نماذج العرض العربية - ب
U+FEFF، الكتلة التي ينتمي إليها رمز النقطة - علامة من اليسار إلى اليمين
- موجيباكي ، نص مشوه ينتج عن فك تشفير غير صحيح
مراجع
- 1 2 "الأسئلة الشائعة - UTF-8، UTF-16، UTF-32 وBOM" . Unicode.org . تم الاطلاع عليه بتاريخ 28 يناير 2017 .
- ^ "كارتا كوم يعدل" . doi.org . تم الاسترجاع 17 يونيو 2026 .
- ↑ "مسافة بدون كسر بعرض صفري (U+Feff)" .
- ↑ "معيار يونيكود 5.0، الفصل 2: البنية العامة" (ملف PDF) . صفحة 36. تاريخ الاطلاع: 29 مارس 2009. الجدول 2-4 .
أنظمة ترميز يونيكود السبعة
- ↑ "معيار يونيكود 5.0، الفصل 2: البنية العامة" (ملف PDF) . صفحة 36. تاريخ الاطلاع: 30 نوفمبر 2008.
استخدام علامة ترتيب البايتات (BOM) ليس إلزاميًا ولا يُنصح به لترميز UTF-8، ولكنه قد يُصادف في سياقات يتم فيها تحويل بيانات UTF-8 من أشكال ترميز أخرى تستخدم علامة ترتيب البايتات، أو عندما تُستخدم علامة ترتيب البايتات كتوقيع UTF-8.
- ١ ٢ "أسئلة شائعة - UTF-8، UTF-16، UTF-32 وBOM: هل يمكن أن يحتوي دفق بيانات UTF-8 على حرف BOM (بصيغة UTF-8)؟ إذا كانت الإجابة بنعم، فهل يمكنني مع ذلك افتراض أن بايتات UTF-8 المتبقية مرتبة بترتيب big-endian؟" . Unicode.org . تم الاطلاع عليه في ٤ يناير ٢٠٠٩ .
- ↑ "ردًا على: ما قبل HTML5 وBOM من أسموس فرايتاج بتاريخ 13 يوليو 2012 (أرشيف قائمة بريد يونيكود)" . Unicode.org . تم الاطلاع عليه بتاريخ 14 يوليو 2012 .
- ↑ "معرّف الخطأ: JDK-6378911، تم تغيير طريقة معالجة مُفكِّك ترميز UTF-8 لعلامة ترتيب البايتات" . Bugs.java.com . تم الاطلاع عليه بتاريخ 14 أكتوبر 2021 .
- ↑ يرجو، فرانسوا (نوفمبر 2003). UTF-8، صيغة تحويل لمعيار ISO 10646. IETF . doi : 10.17487 /RFC3629 . RFC 3629. تاريخ الاسترجاع: 15 مايو 2014 .
- ↑ جيرهاردز، راينر (مارس 2009). "MSG" . بروتوكول Syslog . IETF . القسم 6.4. doi : 10.17487/RFC5424 . RFC 5424 .
- ↑ ألف ب. شتاينباخ (2011). "يونيكود الجزء 1: أساليب إدخال/إخراج وحدة تحكم ويندوز" . تم الاطلاع عليه في 24 مارس 2012. مع ذلك ،
ولأن شفرة المصدر C++ كانت مُشفّرة بصيغة UTF-8 بدون BOM (كما هو معتاد في لينكس)، فقد افترض مُصرّف Visual C++ خطأً أن شفرة المصدر مُشفّرة بصيغة ANSI الخاصة بويندوز.
- ↑ "برنامج المفكرة في ويندوز 10 يحصل على دعم أفضل لترميز UTF-8" . BleepingComputer . تم الاطلاع عليه بتاريخ 7 مارس 2023 .
- ↑ "UTF-16LE" . معيار الترميز . WHATWG.
- ↑ "فك التشفير" . معيار التشفير . WHATWG.
- ↑ يرجو، فرانسوا (8 نوفمبر 2003). "RFC 3629 - UTF-8، صيغة تحويل ISO 10646" . Ietf Datatracker . تاريخ الاسترجاع: 28 يناير 2017 .
- ↑ هونرمان، توم (2 يناير 2021). "توضيح إرشادات استخدام BOM كتوقيع ترميز UTF-8" (ملف PDF) . يونيكود .
- ↑ "وثائق SDL" .
- ↑ ماركوس شيرر. "UTS #6: نظام ضغط يونيكود" . Unicode.org . تم الاطلاع عليه بتاريخ 28 يناير 2017 .
روابط خارجية
- الأسئلة الشائعة حول يونيكود: UTF-8، UTF-16، UTF-32 وBOM
- معيار يونيكود، الفصل 2.6 أنظمة الترميز
- معيار يونيكود، الفصل 2.13 الأحرف الخاصة والأحرف غير الخاصة ، قسم علامة ترتيب البايت (BOM)
- معيار يونيكود، الفصل 16.8 ، الخاصيات ، قسم علامة ترتيب البايت (BOM): U+FEFF
- علامة ترتيب البايت (BOM) في لغة HTML
- نقاط الترميز الخاصة في يونيكود
