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

From Vigyanwiki
Revision as of 13:11, 26 April 2023 by alpha>Indicwiki (Created page with "{{Use dmy dates|date=April 2022}} {{Short description|Unicode character}} {{Redirect|FEFF|the airport in Central African Republic with the airport code FEFF|Bangui M'Poko Inte...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

बाइट ऑर्डर मार्क (बीओएम) विशेष यूनिकोड वर्ण का एक विशेष उपयोग है, U+FEFF BYTE ORDER MARK, जिसका मैजिक नंबर (प्रोग्रामिंग) #मैजिक नंबर के रूप में टेक्स्ट स्ट्रीम की शुरुआत में फाइलों में दिखाई देना टेक्स्ट पढ़ने वाले कंप्यूटर प्रोग्राम को कई चीजों का संकेत दे सकता है:[1]

  • 16-बिट और 32-बिट एनकोडिंग के मामलों में टेक्स्ट स्ट्रीम का बाइट ऑर्डर, या endianness ;
  • तथ्य यह है कि उच्च स्तर के विश्वास के लिए टेक्स्ट स्ट्रीम का एन्कोडिंग यूनिकोड है;
  • कौन सा यूनिकोड वर्ण एन्कोडिंग प्रयोग किया जाता है।

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

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

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


उपयोग

बीओएम चरित्र, बस, यूनिकोड कोडपॉइंट है U+FEFF ZERO WIDTH NO-BREAK SPACE, वर्तमान एन्कोडिंग में एन्कोड किया गया। परंपरागत रूप से, यह कोडपॉइंट केवल शून्य-चौड़ाई वाला गैर-ब्रेकिंग स्पेस है जो शब्द-ग्लिफ के बीच लाइन-ब्रेकिंग को रोकता है। इस प्रकार, यदि बीओएम चरित्र डेटा स्ट्रीम के बीच में प्रकट होता है, तो यूनिकोड का कहना है कि इसे सामान्य कोडपॉइंट के रूप में व्याख्या किया जाना चाहिए, बीओएम के रूप में नहीं। यूनिकोड 3.2 के बाद से, इस प्रयोग को इसके पक्ष में बहिष्कृत कर दिया गया है U+2060 WORD JOINER.[1]


यूटीएफ-8

BOM का UTF-8 प्रतिनिधित्व (हेक्साडेसिमल) बाइट अनुक्रम है EF BB BF.

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

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

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

यूटीएफ-16

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

  • यदि 16-बिट इकाइयों को बड़े एंडियन बाइट ऑर्डर (यूटीएफ-16बीई) में दर्शाया जाता है, तो बीओएम (हेक्साडेसिमल) बाइट अनुक्रम है FE FF
  • यदि 16-बिट इकाइयां छोटे-एंडियन ऑर्डर (यूटीएफ-16LE) का उपयोग करती हैं, तो बीओएम (हेक्साडेसिमल) बाइट अनुक्रम है FF FE

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

यदि कोई 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 लेबल की गई सामग्री को परिनियोजित सामग्री से निपटने के लिए लिटिल-एंडियन के रूप में समझा जाना चाहिए।[12] हालाँकि, यदि एक बाइट-ऑर्डर मार्क मौजूद है, तो उस BOM को किसी भी अन्य चीज़ की तुलना में अधिक आधिकारिक माना जाना चाहिए।[13] प्रोग्राम जो 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 नियंत्रण कोड के लिए कैरेट नोटेशन) है:

Encoding Representation (hexadecimal) Representation (decimal) Bytes as CP1252 characters
UTF-8[lower-alpha 1] EF BB BF 239 187 191 
UTF-16 (BE) FE FF 254 255 þÿ
UTF-16 (LE) FF FE 255 254 ÿþ
UTF-32 (BE) 00 00 FE FF 0 0 254 255 ^@^@þÿ (^@ is the null character)
UTF-32 (LE) FF FE 00 00 255 254 0 0 ÿþ^@^@ (^@ is the null character)
UTF-7[lower-alpha 1] 2B 2F 76[lower-alpha 2][15][16] 43 47 118 +/v
UTF-1[lower-alpha 1] F7 64 4C 247 100 76 ÷dL
UTF-EBCDIC[lower-alpha 1] DD 73 66 73 221 115 102 115 Ýsfs
SCSU[lower-alpha 1] 0E FE FF[lower-alpha 3] 14 254 255 ^Nþÿ (^N is the "shift out" character)
BOCU-1[lower-alpha 1] FB EE 28 251 238 40 ûî(
GB18030[lower-alpha 1] 84 31 95 33 132 49 149 51 „1•3
  1. 1.0 1.1 1.2 1.3 1.4 1.5 1.6 This is not literally a "byte order" mark, since a code unit in these encodings is one byte and therefore cannot have bytes in a "wrong" order. Nevertheless, the BOM can be used to indicate the encoding of the text that follows it.[5][14]
  2. Followed by 38, 39, 2B, or 2F (ASCII 8, 9, + or /), depending on what the next character is.
  3. SCSU allows other encodings of U+FEFF, the shown form is the signature recommended in UTR #6.[17]

यह भी देखें

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

संदर्भ

  1. 1.0 1.1 "FAQ - UTF-8, UTF-16, UTF-32 & BOM". Unicode.org. Retrieved 28 January 2017.
  2. "The Unicode® Standard Version 9.0" (PDF). The Unicode Consortium.
  3. "The Unicode Standard 5.0, Chapter 2:General Structure" (PDF). p. 36. Retrieved 29 March 2009. Table 2-4. The Seven Unicode Encoding Schemes
  4. "The Unicode Standard 5.0, Chapter 2:General Structure" (PDF). p. 36. Retrieved 30 November 2008. Use of a BOM is neither required nor recommended for UTF-8, but may be encountered in contexts where UTF-8 data is converted from other encoding forms that use a BOM or where the BOM is used as a UTF-8 signature
  5. 5.0 5.1 "FAQ - UTF-8, UTF-16, UTF-32 & BOM: Can a UTF-8 data stream contain the BOM character (in UTF-8 form)? If yes, then can I still assume the remaining UTF-8 bytes are in big-endian order?". Unicode.org. Retrieved 4 January 2009.
  6. "Re: pre-HTML5 and the BOM from Asmus Freytag on 2012-07-13 (Unicode Mail List Archive)". Unicode.org. Retrieved 14 July 2012.
  7. "Bug ID: JDK-6378911 UTF-8 decoder handling of byte-order mark has changed". Bugs.java.com. Retrieved 14 October 2021.
  8. Yergeau, Francois (November 2003). UTF-8, a transformation format of ISO 10646. IETF. doi:10.17487/RFC3629. RFC 3629. Retrieved 15 May 2014.
  9. Gerhards, Rainer (March 2009). "MSG". सिसलॉग प्रोटोकॉल. IETF. sec. 6.4. doi:10.17487/RFC5424. RFC 5424.
  10. Alf P. Steinbach (2011). "Unicode part 1: Windows console i/o approaches". Retrieved 24 March 2012. However, since the C++ source code was encoded as UTF-8 without BOM (as is usual in Linux), the Visual C++ compiler erroneously assumed that the source code was encoded as Windows ANSI.
  11. "Windows 10 Notepad is Getting Better UTF-8 Encoding Support". BleepingComputer (in English). Retrieved 7 March 2023.
  12. "UTF-16LE". Encoding Standard. WHATWG.
  13. "व्याख्या करना". Encoding Standard. WHATWG.
  14. Yergeau, François (8 November 2003). "RFC 3629 - UTF-8, a transformation format of ISO 10646". Tools.ietf.org. Retrieved 28 January 2017.
  15. https://unicode.org/L2/L2021/21038-bom-guidance.pdf[bare URL PDF]
  16. "SDL Documentation".
  17. Markus Scherer. "UTS #6: Compression Scheme for Unicode". Unicode.org. Retrieved 28 January 2017.


बाहरी संबंध