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

From alpha
Jump to navigation Jump to search

बाइट क्रम चिन्ह (बीओएम) विशेष एकल कूट वर्ण का एक विशेष उपयोग है, U+FEFF बाइट क्रम चिन्ह, जिसका स्थायित्व संख्या (क्रमादेशन) के रूप में मूलपाठ वर्ग के प्रारम्भ में संचिकाओं में दिखाई देना मूलपाठ पढ़ने वाले कंप्यूटर क्रमादेश को कई चीजों का संकेत दे सकता है:[1]

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

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

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

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


उपयोग

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


यूटीएफ-8

बीओएम का UTF-8 प्रतिनिधित्व (षोडशाधारी) बाइट अनुक्रम EF BB BF है।

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

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

माइक्रोसॉफ्ट संकलनकर्ता [10] और अनुवादक, और माइक्रोसॉफ़्ट विंडोज़ पर सॉफ्टवेयर के कई टुकड़े जैसे लेखनदस्ता (विंडोज़) (विंडोज 10 निर्माण 1903 से पहले)[11]) बीओएम को एक आवश्यक स्थायित्व संख्या (क्रमादेशन) के रूप में संचिकाओं में उपयोग करने के स्थान पर स्वतः शोध प्रणाली का उपयोग करें। मूलपाठ को UTF-8 के रूप में सहेजते समय ये उपकरण एक बीओएम जोड़ते हैं, और UTF-8 की व्याख्या तब तक नहीं कर सकते जब तक कि बीओएम उपस्थित न हो या संचिका में केवल ASCII न हो। विंडोज पॉवरशेल (5.1 तक) UTF-8 XML दस्तावेज़ों को सहेजते समय एक बीओएम जोड़ देगा। हालाँकि, पॉवरशेल अंतर्भाग 6 ने एक जोड़ा है -कूटलेखन utf8No बीओएम नामक कुछ कंडलेटस पर परिवर्तित करें ताकि दस्तावेज़ को बीओएम के बिना सहेजा जा सके। डाउनलोड के लिए किसी दस्तावेज़ को सादे पाठ संचिका में रूपांतरण करते समय गूगल डॉक्स भी एक बीओएम जोड़ता है।

यूटीएफ-16

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

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

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

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

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

क्रमादेश जो UTF-16 को बाइट-आधारित कूटलेखन के रूप में व्याख्या करते हैं, वे वर्णों की विकृत गड़बड़ी प्रदर्शित कर सकते हैं, लेकिन ASCII वर्ण पहचानने योग्य होंगे क्योंकि UTF-16 प्रतिनिधित्व का निम्न बाइट ASCII कूट के समान है और इसलिए समान प्रदर्शित किया जाएगा। 0 के ऊपरी बाइट को रिक्त स्थान, एक अवधि, या कुछ अन्य अपरिवर्तित ग्लिफ के रूप में प्रदर्शित किया जा सकता है।

यूटीएफ-32

हालांकि UTF-32 के साथ एक बीओएम का उपयोग किया जा सकता है, लेकिन इस कूटलेखन का उपयोग पारेषण के लिए संभवतः ही कभी किया जाता है। अन्यथा UTF-16 के समान नियम लागू होते हैं।

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

कूटलेखन द्वारा बाइट क्रम चिह्न

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

Encoding अभ्यावेदन (षोडशाधारी) अभ्यावेदन (दशमलव) बाइट्स CP1252 वर्णों के रूप में
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 ^@^@þÿ (^@ शून्य वर्ण है)
UTF-32 (LE) FF FE 00 00 255 254 0 0 ÿþ^@^@ (^@ शून्य वर्ण है)
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 बाह्‍य विस्थापन संप्रतीक है)
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

यह भी देखें

  • बाएं से दाएं निशान
  • अरबी प्रस्तुति फॉर्म-बी, किस कूट बिंदु पर ब्लॉक करें 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. 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.


बाहरी संबंध


Cite error: <ref> tags exist for a group named "lower-alpha", but no corresponding <references group="lower-alpha"/> tag was found