बाइट क्रम चिन्ह

बाइट ऑर्डर मार्क (बीओएम) विशेष यूनिकोड वर्ण का एक विशेष उपयोग है,, जिसका मैजिक नंबर (प्रोग्रामिंग) #मैजिक नंबर के रूप में टेक्स्ट स्ट्रीम की शुरुआत में फाइलों में दिखाई देना टेक्स्ट पढ़ने वाले कंप्यूटर प्रोग्राम को कई चीजों का संकेत दे सकता है:
 * 16-बिट और 32-बिट एनकोडिंग के मामलों में टेक्स्ट स्ट्रीम का बाइट ऑर्डर, या endianness ;
 * तथ्य यह है कि उच्च स्तर के विश्वास के लिए टेक्स्ट स्ट्रीम का एन्कोडिंग यूनिकोड है;
 * कौन सा यूनिकोड वर्ण एन्कोडिंग प्रयोग किया जाता है।

बीओएम का उपयोग वैकल्पिक है। इसकी उपस्थिति सॉफ़्टवेयर द्वारा UTF-8 के उपयोग में हस्तक्षेप करती है जो फ़ाइल के प्रारंभ में गैर-ASCII बाइट्स की अपेक्षा नहीं करता है लेकिन वह अन्यथा टेक्स्ट स्ट्रीम को संभाल सकता है।

यूनिकोड को 8-बिट, 16-बिट या 32-बिट पूर्णांकों की इकाइयों में एन्कोड किया जा सकता है। 16- और 32-बिट अभ्यावेदन के लिए, मनमाना स्रोतों से पाठ प्राप्त करने वाले कंप्यूटर को यह जानने की आवश्यकता है कि पूर्णांक किस बाइट क्रम में एन्कोड किए गए हैं। BOM को उसी योजना में एन्कोड किया गया है, जैसा कि बाकी दस्तावेज़ में है और एक यूनिवर्सल कैरेक्टर सेट कैरेक्टर बन जाता है। #अक्षर| यूनिकोड कोड बिंदु यदि इसके बाइट्स की अदला-बदली की जाती है। इसलिए, टेक्स्ट एक्सेस करने की प्रक्रिया टेक्स्ट स्ट्रीम के बाहर कुछ अनुबंध या मेटाडेटा की आवश्यकता के बिना, एंडियननेस निर्धारित करने के लिए इन पहले कुछ बाइट्स की जांच कर सकती है। यदि आवश्यक हो, तो आमतौर पर प्राप्त करने वाला कंप्यूटर बाइट्स को अपनी अंतहीनता में स्वैप कर देगा, और प्रसंस्करण के लिए बीओएम की आवश्यकता नहीं होगी।

बीओएम का बाइट अनुक्रम प्रति यूनिकोड एन्कोडिंग (यूनिकोड मानक के बाहर वाले यूटीएफ-7 -7 जैसे, देखें #Byte_order_marks_by_encoding) के अनुसार भिन्न होता है, और अन्य एन्कोडिंग में संग्रहीत टेक्स्ट स्ट्रीम की शुरुआत में कोई भी अनुक्रम दिखाई देने की संभावना नहीं है। इसलिए, टेक्स्ट स्ट्रीम की शुरुआत में एक एन्कोडेड बीओएम रखना यह संकेत दे सकता है कि टेक्स्ट यूनिकोड है और इस्तेमाल की गई एन्कोडिंग योजना की पहचान करता है। BOM कैरेक्टर के इस प्रयोग को यूनिकोड सिग्नेचर कहा जाता है।

उपयोग
बीओएम चरित्र, बस, यूनिकोड कोडपॉइंट है, वर्तमान एन्कोडिंग में एन्कोड किया गया। परंपरागत रूप से, यह कोडपॉइंट केवल शून्य-चौड़ाई वाला गैर-ब्रेकिंग स्पेस है जो शब्द-ग्लिफ के बीच लाइन-ब्रेकिंग को रोकता है। इस प्रकार, यदि बीओएम चरित्र डेटा स्ट्रीम के बीच में प्रकट होता है, तो यूनिकोड का कहना है कि इसे सामान्य कोडपॉइंट के रूप में व्याख्या किया जाना चाहिए, बीओएम के रूप में नहीं। यूनिकोड 3.2 के बाद से, इस प्रयोग को इसके पक्ष में बहिष्कृत कर दिया गया है.

यूटीएफ-8
BOM का UTF-8 प्रतिनिधित्व (हेक्साडेसिमल) बाइट अनुक्रम है.

यूनिकोड मानक UTF-8 में BOM की अनुमति देता है, लेकिन इसके उपयोग की आवश्यकता या अनुशंसा नहीं करता है। UTF-8 में बाइट ऑर्डर का कोई अर्थ नहीं है, इसलिए UTF-8 में इसका एकमात्र उपयोग प्रारंभ में यह संकेत देना है कि टेक्स्ट स्ट्रीम UTF-8 में एन्कोड किया गया है, या यह कि इसे वैकल्पिक BOM वाली स्ट्रीम से UTF-8 में परिवर्तित किया गया था। मानक किसी BOM के मौजूद होने पर उसे हटाने की अनुशंसा भी नहीं करता है, ताकि एनकोडिंग के बीच राउंड-ट्रिपिंग से जानकारी नष्ट न हो, और ताकि उस पर निर्भर रहने वाला कोड काम करना जारी रखे। आईईटीएफ अनुशंसा करता है कि यदि प्रोटोकॉल या तो (ए) हमेशा यूटीएफ -8 का उपयोग करता है, या (बी) के पास यह इंगित करने का कोई अन्य तरीका है कि किस एन्कोडिंग का उपयोग किया जा रहा है, तो उसे हस्ताक्षर के रूप में यू + एफईएफएफ के उपयोग को मना करना चाहिए। इस सिफारिश का पालन नहीं करने का एक उदाहरण IETF Syslog प्रोटोकॉल है जिसके लिए UTF-8 में टेक्स्ट की आवश्यकता होती है और BOM की भी आवश्यकता होती है। बीओएम का उपयोग नहीं करने से पाठ कुछ ऐसे सॉफ़्टवेयर के साथ पीछे-संगत हो सकता है जो यूनिकोड-जागरूक नहीं है। उदाहरणों में प्रोग्रामिंग भाषाएं शामिल हैं जो गैर-ASCII बाइट्स को स्ट्रिंग अक्षर में अनुमति देती हैं लेकिन फ़ाइल की शुरुआत में नहीं।

UTF-8 एक विरल एन्कोडिंग है: संभावित बाइट संयोजनों का एक बड़ा अंश वैध UTF-8 पाठ में परिणत नहीं होता है। किसी अन्य एन्कोडिंग में बाइनरी डेटा और टेक्स्ट में बाइट अनुक्रम शामिल होने की संभावना है जो UTF-8 के रूप में अमान्य हैं। व्यावहारिक रूप से एकमात्र अपवाद केवल एएससीआईआई-रेंज बाइट्स वाला पाठ है, लेकिन जैसा कि सभी आधुनिक एनकोडिंग एएससीआईआई वर्णों का प्रतिनिधित्व करने के लिए एएससीआईआई-रेंज बाइट्स का उपयोग करते हैं, इस तरह के टेक्स्ट को यूटीएफ -8 के रूप में सुरक्षित रूप से व्याख्या किया जा सकता है, भले ही इसे किस एन्कोडिंग के रूप में लिखा गया हो। इन विचारों के कारण, UTF-8 त्रुटियों की कमी उच्च विश्वास के साथ इंगित करती है कि BOM की आवश्यकता के बिना, UTF-8 उपयोग में है।

माइक्रोसॉफ्ट कंपाइलर्स और दुभाषिए, और माइक्रोसॉफ़्ट विंडोज़  पर सॉफ्टवेयर के कई टुकड़े जैसे  नोटपैड (विंडोज़)  (विंडोज 10 बिल्ड 1903 से पहले) ) बीओएम को एक आवश्यक मैजिक नंबर (प्रोग्रामिंग) #मैजिक नंबर के रूप में फाइलों में उपयोग करने के बजाय ह्यूरिस्टिक्स का उपयोग करें। टेक्स्ट को UTF-8 के रूप में सहेजते समय ये उपकरण एक BOM जोड़ते हैं, और UTF-8 की व्याख्या तब तक नहीं कर सकते जब तक कि BOM मौजूद न हो या फ़ाइल में केवल ASCII न हो। Windows PowerShell (5.1 तक) UTF-8 XML दस्तावेज़ों को सहेजते समय एक BOM जोड़ देगा। हालाँकि, PowerShell Core 6 ने एक जोड़ा है   utf8NoBOM नामक कुछ cmdlets पर स्विच करें ताकि दस्तावेज़ को BOM के बिना सहेजा जा सके। डाउनलोड के लिए किसी दस्तावेज़ को सादे पाठ फ़ाइल में कनवर्ट करते समय Google डॉक्स भी एक बीओएम जोड़ता है।

यूटीएफ-16
UTF-16 में, एक BOM फाइल या स्ट्रीम के सभी 16-बिट कैरेक्टर एन्कोडिंग # टर्मिनोलॉजी के एंडियननेस (बाइट ऑर्डर) को इंगित करने के लिए फ़ाइल या कैरेक्टर स्ट्रीम के पहले कैरेक्टर के रूप में रखा जा सकता है। यदि इस स्ट्रीम को गलत एंडियननेस के साथ पढ़ने का प्रयास किया जाता है, तो बाइट्स की अदला-बदली की जाएगी, इस प्रकार चरित्र को डिलीवर किया जाएगा , जो स्पेशल (यूनिकोड ब्लॉक) द्वारा यूनिकोड के रूप में एक जो पाठ में कभी प्रकट नहीं होना चाहिए।

इंटरनेट असाइन किए गए नंबर प्राधिकरण के लिए पंजीकृत चारसेट UTF-16BE और UTF-16LE के लिए, बाइट ऑर्डर मार्क का उपयोग नहीं किया जाना चाहिए क्योंकि इन कैरेक्टर सेट के नाम पहले से ही बाइट ऑर्डर निर्धारित करते हैं। यदि ऐसी टेक्स्ट स्ट्रीम में कहीं भी सामना किया जाता है, तो U+FEFF को शून्य चौड़ाई नो-ब्रेक स्पेस के रूप में समझा जाना चाहिए।
 * यदि 16-बिट इकाइयों को बड़े एंडियन बाइट ऑर्डर (यूटीएफ-16बीई) में दर्शाया जाता है, तो बीओएम (हेक्साडेसिमल) बाइट अनुक्रम है
 * यदि 16-बिट इकाइयां छोटे-एंडियन ऑर्डर (यूटीएफ-16LE) का उपयोग करती हैं, तो बीओएम (हेक्साडेसिमल) बाइट अनुक्रम है

यदि कोई BOM नहीं है, तो यह अनुमान लगाना संभव है कि पाठ UTF-16 है और इसका बाइट क्रम ASCII वर्णों (अर्थात 0x20-0x7E श्रेणी में बाइट से सटे 0 बाइट, CR और 0x0D के लिए 0x0A और 0x0D) की खोज करके एलएफ)। एक ही क्रम में एक बड़ी संख्या (यादृच्छिक संभावना से कहीं अधिक) UTF-16 का एक बहुत अच्छा संकेत है और क्या 0 सम या विषम बाइट्स में है, बाइट क्रम को इंगित करता है। हालाँकि, इसका परिणाम गलत सकारात्मक और गलत नकारात्मक दोनों हो सकता है।

यूनिकोड मानक राज्यों के अनुरूपता (धारा 3.10) के खंड D98, UTF-16 एन्कोडिंग योजना BOM के साथ शुरू हो सकती है या नहीं भी हो सकती है। हालांकि, जब कोई बीओएम नहीं होता है, और उच्च स्तरीय प्रोटोकॉल की अनुपस्थिति में, यूटीएफ -16 एन्कोडिंग योजना का बाइट ऑर्डर बड़ा-एंडियन होता है। उच्च-स्तरीय प्रोटोकॉल लागू है या नहीं, यह व्याख्या के लिए खुला है। एक कंप्यूटर के लिए स्थानीय फ़ाइलें जिसके लिए मूल बाइट ऑर्डरिंग थोड़ा-अंत है, उदाहरण के लिए, UTF-16LE के रूप में एन्कोडेड होने का तर्क दिया जा सकता है। इसलिए, बड़े-एंडियन की धारणा को व्यापक रूप से नजरअंदाज कर दिया जाता है। HTML5 में प्रयुक्त W3C/वेब ब्राउज़र इंजन की तुलना (HTML समर्थन) एन्कोडिंग मानक निर्दिष्ट करता है कि utf-16 या utf-16le लेबल की गई सामग्री को परिनियोजित सामग्री से निपटने के लिए लिटिल-एंडियन के रूप में समझा जाना चाहिए। हालाँकि, यदि एक बाइट-ऑर्डर मार्क मौजूद है, तो उस BOM को किसी भी अन्य चीज़ की तुलना में अधिक आधिकारिक माना जाना चाहिए। प्रोग्राम जो UTF-16 को बाइट-आधारित एन्कोडिंग के रूप में व्याख्या करते हैं, वे वर्णों की विकृत गड़बड़ी प्रदर्शित कर सकते हैं, लेकिन ASCII वर्ण पहचानने योग्य होंगे क्योंकि UTF-16 प्रतिनिधित्व का निम्न बाइट ASCII कोड के समान है और इसलिए समान प्रदर्शित किया जाएगा. 0 के ऊपरी बाइट को कुछ भी नहीं, सफेद स्थान, एक अवधि, या कुछ अन्य अपरिवर्तित ग्लिफ के रूप में प्रदर्शित किया जा सकता है।

यूटीएफ-32
हालांकि UTF-32 के साथ एक BOM का उपयोग किया जा सकता है, लेकिन इस एन्कोडिंग का उपयोग ट्रांसमिशन के लिए शायद ही कभी किया जाता है। अन्यथा UTF-16 के समान नियम लागू होते हैं।

लिटिल-एंडियन यूटीएफ-32 के लिए बीओएम, लिटिल-एंडियन यूटीएफ-16 बीओएम के समान पैटर्न है, जिसके बाद यूटीएफ-16 एनयूएल कैरेक्टर आता है, बीओएम का एक असामान्य उदाहरण दो अलग-अलग एनकोडिंग में समान पैटर्न है। एन्कोडिंग की पहचान करने के लिए BOM का उपयोग करने वाले प्रोग्रामर को यह तय करना होगा कि NUL पहले वर्ण के साथ UTF-32 या UTF-16 की संभावना अधिक है।

एन्कोडिंग द्वारा बाइट क्रम चिह्न
यह तालिका बताती है कि विभिन्न एनकोडिंग में बीओएम वर्ण को बाइट अनुक्रम के रूप में कैसे दर्शाया जाता है और कैसे वे अनुक्रम एक पाठ संपादक में दिखाई दे सकते हैं जो मोजिबेक (CP1252 और C0 और C1 नियंत्रण कोड के लिए कैरेट नोटेशन) है:

यह भी देखें

 * बाएं से दाएं निशान
 * अरबी प्रस्तुति फॉर्म-बी, किस कोड बिंदु पर ब्लॉक करें  अंतर्गत आता है

बाहरी संबंध

 * Unicode FAQ: UTF-8, UTF-16, UTF-32 & BOM
 * The Unicode Standard, chapter 2.6 Encoding Schemes
 * The Unicode Standard, chapter 2.13 Special Characters and Noncharacters, section Byte Order Mark (BOM)
 * The Unicode Standard, chapter 16.8 Specials, section Byte Order Mark (BOM): U+FEFF