سؤال

هل هذه عفا عليها الزمن؟يبدو أنها أسوأ فكرة على الإطلاق -- قم بتضمين شيء ما في محتويات ملفك لا يمكن لأحد رؤيته، ولكنه يؤثر على وظائف الملف.لا أفهم لماذا أريد واحدة.

هل كانت مفيدة؟

المحلول

وانهم ضروريا في بعض الحالات، نعم، لأن هناك على حد سواء تطبيقات Endian طفيف وendian كبيرة من UTF-16.

عند قراءة مجهولة UTF-16 ملف، كيف يمكنك معرفة أي من الاثنين يستخدم؟ الحل الوحيد هو وضع نوع من علامة يسهل التعرف عليها في الملف، والذي لا يمكن أبدا أن يكون مخطئا لأي شيء آخر، بغض النظر عن غمرت endian المستخدمة.

وهذا ما يفعل BOM.

وهل تحتاج واحد؟ إلا إذا كنت 1) باستخدام ترميز UTF حيث endianness قضية (لا يهم لUTF-16، ولكن UTF8 دائما تبدو هي نفسها بغض النظر عن endianness)، <م> و الملف ستكون مشتركة مع التطبيقات الخارجية.

إذا التطبيق الخاص بك هو الوحيد الذي يحدث لقراءة وكتابة الملف، يمكنك حذف BOM، وببساطة يقرر مرة واحدة وإلى الأبد الذي endianness كنت تنوي استخدام. ولكن إذا تطبيق آخر لديه لقراءة الملف، فإنه لا يعرف endianness مقدما، وذلك إضافة BOM قد يكون فكرة جيدة.

نصائح أخرى

بعض المقتطفات من الأسئلة الشائعة حول UTF وBOM قد يكون من المفيد من Unicode Consortium.

س:ما هو BOM؟

أ: تتكون علامة ترتيب البايت (BOM) من رمز الحرف U+FEFF في بداية دفق البيانات, ، حيث يمكن استخدامه كتوقيع يحدد ترتيب البايت ونموذج التشفير، بشكل أساسي لملفات النص العادي غير المميزة.بموجب بعض البروتوكولات ذات المستوى الأعلى، قد يكون استخدام قائمة مكونات الصنف إلزاميًا (أو محظورًا) في تدفق بيانات Unicode المحدد في هذا البروتوكول. (التأكيد على الألغام.)

لن أقول بالضبط أن علامة ترتيب البايت هي مغروس في البيانات.بل هو البادئات البيانات.يكون الحرف مجرد علامة ترتيب بايت عندما يكون أول شيء في دفق البيانات.في أي مكان آخر، وهو مساحة غير قابلة للكسر بعرض صفر.البرامج المدركة لليونيكود والتي لا تحترم علامة ترتيب البايت لا تتضرر حقًا من وجودها على أي حال نظرًا لأن الحرف غير مرئي، وأداة ربط الكلمات في بداية كتلة النص تقوم فقط بربط الحرف التالي بلا شيء، لذلك ليس له أي تأثير.

س:أين تكون BOM مفيدة؟

أ: يعد BOM مفيدًا في بداية الملفات التي يتم كتابتها كنص، ولكن لا يُعرف ما إذا كانت بتنسيق endian كبير أم صغير - ويمكن أيضًا أن يكون بمثابة تلميح يشير إلى أن الملف موجود بتنسيق Unicode، بدلاً من في التشفير القديم، علاوة على ذلك، فهو بمثابة توقيع لنموذج التشفير المحدد المستخدم.

لذلك، قد ترغب في الحصول على BOM عندما يكون برنامجك قادرًا على التعامل مع العديد من ترميزات Unicode.وإلا كيف سيعرف برنامجك الترميز الذي يجب استخدامه عند تفسير مدخلاته؟

س:عند استخدام قائمة مكونات الصنف، هل يتم ذلك فقط بنص Unicode بطول 16 بت؟

أ: لا، يمكن استخدام BOM كتوقيع بغض النظر عن كيفية تحويل نص Unicode:UTF-16، UTF-8، UTF-7، إلخ.ستكون وحدات البايت الدقيقة التي تشتمل على BOM هي كل ما يتم تحويل حرف Unicode U+FEFF إليه بواسطة تنسيق التحويل هذا.في هذا النموذج، تعمل قائمة مكونات الصنف على الإشارة إلى أنه ملف Unicode والتنسيقات الموجودة به.

ربما يكون هذا هو الحال حيث يتم استخدام BOM بشكل متكرر اليوم.فهو يميز النص المشفر بـ UTF-8 عن أي ترميزات أخرى؛إنه لا يحدد بالفعل ترتيب البايتات نظرًا لأن UTF-8 يحتوي على ترتيب واحد فقط.

إذا كنت تقوم بتصميم بروتوكول أو تنسيق بيانات خاص بك، فلن يُطلب منك استخدام قائمة مكونات الصنف (BOM).سؤال آخر من الأسئلة الشائعة يتناول ذلك:

س:كيف أقوم بوضع علامة على البيانات التي لا تفسر U+FEFF على أنها BOM؟

أ: استخدم العلامة UTF-16BE للإشارة إلى نص UTF-16 ذو النهاية الكبيرة، وUTF-16LE للإشارة إلى نص UTF-16 ذو النهاية الصغيرة.إذا كنت تستخدم BOM، فقم بوضع علامة على النص ببساطة باستخدام UTF-16.

ويذكر مفهوم وضع العلامات تنسيق البيانات الخاصة بك.وهذا يعني تحديد التنسيق خارج النطاق من البيانات نفسها.يعد هذا أمرًا رائعًا إذا كانت هذه التسهيلات متاحة لك، ولكنها غالبًا لا تكون كذلك، خاصة عندما يتم تحديث الأنظمة القديمة لتناسب Unicode.

ووBOM يدل التي ترميز يونيكود الملف في وبدون هذا التمييز، فإن القارئ يونيكود لا يعرفون كيفية قراءة الملف.

ولكن، UTF-8 لا يحتاج الى BOM.

وتحقق من ويكيبيديا المقالة .

وكما الموسومة هذا مع UTF-8 أنا أريد أن أقول لك لا تحتاج إلى BOM. Byto ماركس ترتيب مفيدة فقط لUTF-16 و UTF-32 حيث يبلغ الكمبيوتر ما إذا كان الملف في endian كبيرة أو Endian طفيف . بعض برامج تحرير النصوص قد تستخدم علامة ترتيب البايت أن تقرر ما ترميز الاستخدامات الوثيقة، ولكن هذا ليس جزءا من معيار يونيكود.

وو"BOM" هو محتفظ بمنصبه منذ الأيام الأولى من Unicode عند كان من المفترض أن استخدام يونيكود يعني استخدام أحرف 16 بت. من غير المجدي تماما في الترميز مثل UTF-8 التي ليس لديها سوى ترتيب بايت واحد. اختيار U + FEFF هو أيضا دون المستوى الأمثل لUTF-32، لأنه لا يمكن التمييز بين كل أوامر بايت في منتصف endian المحتملة (للقيام بذلك يتطلب BOM المشفرة مع 4 <م> مختلفا بايت).

والسبب الوحيد الذي كنت تستخدم واحد عند إرسال UTF-16 أو UTF 32 البيانات بين منصات مع أوامر بايت مختلفة، ولكن (1) معظم الناس يستخدمون UTF-8 على أي حال، و (2) على المعلمة MIME charset آلية أفضل.

وUTF16 وUTF32 يمكن أن تكون مكتوبة في كل من الأشكال الكبيرة Endian وEndian طفيف. هل يمكن أن تحاول تحديد تجريبيا في endianess من خلال تحليل نتيجة معالجة الملف في أي endianess، ولكن لتوفير كل ما يزعج، يمكن للBOM أقول لك على الفور.

وUTF-8 لا حقا في حاجة الى BOM الرغم من ذلك، كما كنت فك ترميز بايت بواسطة بايت.

وبغض النظر عما إذا كنت تستخدم هذه بنفسك عند إنشاء ملفات نصية، وربما من المجدي أن تكون على علم عند قراءة الملفات النصية. أي كشف وتخطي (ومثالي التعامل وفقا لذلك) وBOM في بداية الملف. لقد واجهت القليلة التي كان عليها والتي تسبب لي بعض المشاكل في البداية حتى أنا أحسب ما يجري.

وكما UTF16 وUTF32 BOMs معرفة ما إذا كان المحتوى هو في شكل كبير-Endian أو Endian طفيف وأيضا هذا المحتوى هو Unicode، وUTF-8 BOM يصنف الملف كملف ترميز UTF-8. دون UTF-8 BOM، كيف يمكنك أن تعرف إذا كان ملف ANSI أو UTF-8 ملف المشفرة؟ وUTF-8 BOM لا أقول endianess بطبيعة الحال، لأن UTF-8 هو دائما تيار بايت، لكنه يقول إذا كان المحتوى هو UTF-8 يونيكود المشفرة أو ANSI. بالطبع يمكنك مسح لصالحة UTF-8 متواليات ولكن في رأيي، فمن الأسهل للتحقق من وحدات البايت الثلاثة الأولى من الملف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top