एचटीएमएल में अक्षर एनकोडिंग: Difference between revisions

From Vigyanwiki
(TEXT)
Line 1: Line 1:
{{Short description|Use of encoding systems for international characters in HTML}}
{{Short description|Use of encoding systems for international characters in HTML}}
{{For|a list of character entity references|List of XML and HTML character entity references}}
{{For|वर्ण इकाई संदर्भों की एक सूची|XML और HTML वर्ण इकाई संदर्भों की सूची}}
{{Hatnote|For fixing links within Wikipedia, see [[Help:Percent-encoding#Fixing links with unsupported characters|Help:Percent-encoding § Fixing Links with Unsupported Characters]].}}
{{Hatnote|विकिपीडिया के अंतर्गत लिंक ठीक करने के लिए देखें [[Help:Percent-encoding#Fixing links with unsupported characters|सहायता:प्रतिशत-एन्कोडिंग § असमर्थित वर्णों वाले लिंक ठीक करना]]}}
{{Use dmy dates|date=December 2021}}
 
{{Html series}}
{{Html series}}
जबकि हाइपरटेक्स्ट मार्कअप लैंग्वेज ([[एचटीएमएल]]) 1991 से उपयोग में है, दिसंबर 1997 से एचटीएमएल 4.0 पहला मानकीकृत संस्करण था जहां अंतर्राष्ट्रीय [[चरित्र (कंप्यूटिंग)]] को यथोचित पूर्ण उपचार दिया गया था। जब एक HTML दस्तावेज़ में सात-बिट [[ASCII]] की सीमा के बाहर विशेष वर्ण शामिल होते हैं, तो दो लक्ष्य विचार करने योग्य होते हैं: सूचना की [[अखंडता]], और सार्वभौमिक [[वेब ब्राउज़र]] प्रदर्शन।
जबकि हाइपरटेक्स्ट मार्कअप भाषा ([[एचटीएमएल]]) 1991 से उपयोग में है, दिसंबर 1997 से एचटीएमएल 4.0 पहला मानकीकृत संस्करण था जहां अंतर्राष्ट्रीय [[चरित्र (कंप्यूटिंग)|पात्रों (कंप्यूटिंग)]] उचित रूप से पूर्ण उपचार दिया गया था। जब एक HTML दस्तावेज़ में सात-बिट [[ASCII]] की सीमा के बाहर विशेष वर्ण सम्मिलित होते हैं, तो दो लक्ष्य विचार करने योग्य होते हैं: सूचना की [[अखंडता]], और सार्वभौमिक [[वेब ब्राउज़र|ब्राउज़र]] प्रदर्शन होते हैं।


== दस्तावेज़ के वर्ण एन्कोडिंग निर्दिष्ट करना ==
== दस्तावेज़ के वर्ण एन्कोडिंग को निर्दिष्ट करना ==
दस्तावेज़ में कौन से वर्ण एन्कोडिंग का उपयोग किया जाता है, यह निर्दिष्ट करने के दो सामान्य तरीके हैं।
यह निर्दिष्ट करने के दो सामान्य प्रकार हैं कि दस्तावेज़ में किस वर्ण एन्कोडिंग का उपयोग किया गया है।


सबसे पहले, [[वेब सर्वर]] में वर्ण एन्कोडिंग या शामिल हो सकता है<code>charset</code>[[ हाइपरटेक्स्ट परहस्त शिष्टाचार ]] (HTTP) में <code>Content-Type</code> हेडर, जो आमतौर पर इस तरह दिखेगा:<ref>{{citation |chapter-url=http://tools.ietf.org/html/rfc7231#section-3.1.1.5|chapter=Content-Type |title=Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content|publisher=[[IETF]] |date=June 2014 |doi=10.17487/RFC7231 |access-date=2014-07-30|editor-last1=Fielding |editor-last2=Reschke |editor-first1=R |editor-first2=J |last1=Fielding |first1=R. |last2=Reschke |first2=J. |s2cid=14399078 }}</ref>
सबसे पहले, [[वेब सर्वर]] [[ हाइपरटेक्स्ट परहस्त शिष्टाचार |हाइपरटेक्स्ट परहस्त प्रोटोकॉल]] (HTTP) <code>विषय-</code>प्रकार हेडर वर्ण एन्कोडिंग या <code>"चारसमुच्चय"</code> में सम्मिलित कर सकता है, जो विशिष्ट रूप से इस तरह दिखेगा:<ref>{{citation |chapter-url=http://tools.ietf.org/html/rfc7231#section-3.1.1.5|chapter=Content-Type |title=Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content|publisher=[[IETF]] |date=June 2014 |doi=10.17487/RFC7231 |access-date=2014-07-30|editor-last1=Fielding |editor-last2=Reschke |editor-first1=R |editor-first2=J |last1=Fielding |first1=R. |last2=Reschke |first2=J. |s2cid=14399078 }}</ref><blockquote>विषय -प्रकार: text/html; charset=utf-8</blockquote>यह विधि HTTP सर्वर को [[सामग्री बातचीत|विषय वार्ता]] के अनुसार दस्तावेज़ की एन्कोडिंग को बदलने का एक सुविधाजनक प्रकार देती है; कुछ HTTP सर्वर सॉफ़्टवेयर ऐसा कर सकते हैं, उदाहरण के लिए अपाचे मॉड्यूल की सूची <code>mod_charset_lite के साथ है।</code><ref>{{cite web| url = http://httpd.apache.org/docs/2.0/en/mod/mod_charset_lite.html| title = Apache Module mod_charset_lite}}</ref>
सामग्री-प्रकार: पाठ/एचटीएमएल; वर्णसेट = यूटीएफ -8
यह विधि HTTP सर्वर को [[सामग्री बातचीत]] के अनुसार दस्तावेज़ के एन्कोडिंग को बदलने का एक सुविधाजनक तरीका देती है; कुछ HTTP सर्वर सॉफ़्टवेयर इसे कर सकते हैं, उदाहरण के लिए Apache, Apache मॉड्यूल की सूची के साथ <code>mod_charset_lite</code>.<ref>{{cite web| url = http://httpd.apache.org/docs/2.0/en/mod/mod_charset_lite.html| title = Apache Module mod_charset_lite}}</ref>
दूसरा, एक घोषणा को दस्तावेज़ में ही शामिल किया जा सकता है।


HTML के लिए इस जानकारी को अंदर शामिल करना संभव है <code>head</code> दस्तावेज़ के शीर्ष के निकट तत्व:<ref name=html5charset/>
दूसरा, एक घोषणा को दस्तावेज़ में ही सम्मिलित किया जा सकता है।
<!-- Please don't add a closing "/": that is incorrect here. -->
<वाक्यविन्यास लैंग = html4सख्त>
<मेटा http-equiv= सामग्री-प्रकार सामग्री= टेक्स्ट/एचटीएमएल; चारसेट=यूटीएफ-8 >
</वाक्यविन्यास हाइलाइट>


[[HTML5]] निम्नलिखित सिंटैक्स को बिल्कुल समान अर्थ देने की अनुमति देता है:<ref name=html5charset>{{citation |chapter-url=http://www.w3.org/TR/html5/document-metadata.html#specifying-the-documents-character-encoding |chapter=Specifying the document's character encoding |title=HTML5 |publisher=[[World Wide Web Consortium]] |date=14 December 2017 |access-date=2018-05-28}}</ref>
HTML के लिए इस जानकारी को दस्तावेज़ के शीर्ष के पास मुख्य तत्व के अंदर सम्मिलित करना संभव है:<ref name="html5charset" /><blockquote><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></blockquote>[[HTML5]] निम्नलिखित वाक्यविन्यास को भी बिल्कुल वही अर्थ देने की अनुमति देता है:<ref name="html5charset">{{citation |chapter-url=http://www.w3.org/TR/html5/document-metadata.html#specifying-the-documents-character-encoding |chapter=Specifying the document's character encoding |title=HTML5 |publisher=[[World Wide Web Consortium]] |date=14 December 2017 |access-date=2018-05-28}}</ref><blockquote><meta charset="utf-8"></blockquote>[[एक्सएचटीएमएल|XHTML]] दस्तावेज़ों में एक तीसरा विकल्प है: [[एक्सएमएल|XML]] घोषणा के माध्यम से वर्ण एन्कोडिंग को व्यक्त करना, इस प्रकार:<ref>{{citation |chapter-url=http://www.w3.org/TR/REC-xml/#sec-prolog-dtd |chapter=Prolog and Document Type Declaration |title=XML |first1=T. |last1=Bray |author-link1=Tim Bray |first2=J. |last2=Paoli |first3=C. |last3=Sperberg-McQueen |author-link3=Michael Sperberg-McQueen |first4=E. |last4=Maler |first5=F. |last5=Yergeau |publisher=[[W3C]] |date=26 November 2008 |access-date=8 March 2010}}</ref>
<!-- Please don't add a closing "/": that is unnecessary here. -->
<वाक्यविन्यास लैंग = html4सख्त>
<मेटा वर्णसेट = यूटीएफ -8>
</वाक्यविन्यास हाइलाइट>
 
[[एक्सएचटीएमएल]] दस्तावेज़ों में एक तीसरा विकल्प है: [[एक्सएमएल]] घोषणा के माध्यम से वर्ण एन्कोडिंग व्यक्त करने के लिए, इस प्रकार है:<ref>{{citation |chapter-url=http://www.w3.org/TR/REC-xml/#sec-prolog-dtd |chapter=Prolog and Document Type Declaration |title=XML |first1=T. |last1=Bray |author-link1=Tim Bray |first2=J. |last2=Paoli |first3=C. |last3=Sperberg-McQueen |author-link3=Michael Sperberg-McQueen |first4=E. |last4=Maler |first5=F. |last5=Yergeau |publisher=[[W3C]] |date=26 November 2008 |access-date=8 March 2010}}</ref>
<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
</syntaxhighlight>
</syntaxhighlight>
इस दूसरे दृष्टिकोण के साथ, क्योंकि वर्ण एन्कोडिंग को तब तक नहीं जाना जा सकता जब तक कि घोषणा को पार्स नहीं किया जाता है, यह जानने में समस्या होती है कि दस्तावेज़ में कौन से वर्ण एन्कोडिंग का उपयोग घोषणा तक और स्वयं घोषणा सहित किया जाता है। यदि वर्ण एन्कोडिंग एक ASCII एक्सटेंशन है तो घोषणा तक और घोषणा सहित सामग्री शुद्ध ASCII होनी चाहिए और यह सही तरीके से काम करेगी। कैरेक्टर एनकोडिंग के लिए जो ASCII एक्सटेंशन नहीं हैं (अर्थात ASCII का सुपरसेट नहीं), जैसे कि [[UTF-16BE]] और [[UTF-16LE]], HTML का एक प्रोसेसर, जैसे वेब ब्राउज़र, कुछ मामलों में घोषणा को पार्स करने में सक्षम होना चाहिए ह्यूरिस्टिक्स का उपयोग।
इस दूसरे दृष्टिकोण के साथ, क्योंकि घोषणा को पार्स किए जाने तक वर्ण एन्कोडिंग को नहीं जाना जा सकता है, इसलिए यह जानने में समस्या होती है कि दस्तावेज़ में घोषणा तक और इसमें कौन सा वर्ण एन्कोडिंग का उपयोग किया गया है। यदि वर्ण एन्कोडिंग एक ASCII विस्तार है तो घोषणा तक का विषय शुद्ध ASCI होनी चाहिए और यह सही प्रकार से काम करेगी। वर्ण एन्कोडिंग के लिए जो ASCII विस्तार नहीं हैं (अर्थात ASCII का अधिसमुच्चय नहीं), जैसे कि [[UTF-16BE]] और [[UTF-16LE]], HTML का एक प्रोसेसर, जैसे कि वेब ब्राउज़र, कुछ प्रकरणो में ह्यूरिस्टिक्स के उपयोग के माध्यम से घोषणा को पार्स करने में सक्षम होना चाहिए।


=== एन्कोडिंग पहचान एल्गोरिदम ===
=== एन्कोडिंग संसूचन एल्गोरिदम ===
HTML5 के अनुसार अनुशंसित चारसेट [[UTF-8]] है।<ref name=html5charset/>एक एन्कोडिंग स्नीफिंग एल्गोरिदम को इनपुट के कई स्रोतों के आधार पर दस्तावेज़ के वर्ण एन्कोडिंग को निर्धारित करने के लिए विनिर्देश में परिभाषित किया गया है:
HTML5 के अनुसार अनुशंसित चारसमुच्चय [[UTF-8]] है।<ref name=html5charset/> इनपुट के कई स्रोतों के आधार पर दस्तावेज़ के वर्ण एन्कोडिंग को निर्धारित करने के लिए विनिर्देश में एक <nowiki>''</nowiki>एन्कोडिंग स्नीफिंग एल्गोरिदम<nowiki>''</nowiki> को परिभाषित किया गया है, जिसमें सम्मिलित हैं:
# स्पष्ट उपयोगकर्ता निर्देश
# स्पष्ट उपयोगकर्ता निर्देश
# दस्तावेज़ के पहले 1024 बाइट्स के भीतर एक स्पष्ट मेटा टैग
# दस्तावेज़ के पहले 1024 बाइट्स के अंतर्गत एक स्पष्ट मेटा टैग
# दस्तावेज़ के पहले तीन बाइट्स के भीतर एक [[बाइट ऑर्डर मार्क]] (BOM)।
# दस्तावेज़ के पहले तीन बाइट्स के अंतर्गत एक [[बाइट ऑर्डर मार्क|बाइट अनुक्रम मार्क]] (BOM)।
# HTTP सामग्री-प्रकार या अन्य परिवहन परत की जानकारी
# HTTP विषय-प्रकार या अन्य परिवहन परत की जानकारी
# विशिष्ट अनुक्रमों या बाइट मानों की श्रेणियों की तलाश में दस्तावेज़ बाइट्स का विश्लेषण,<ref>{{cite web| url = http://www.w3.org/TR/html5/syntax.html#prescan-a-byte-stream-to-determine-its-encoding| title = HTML5 prescan a byte stream to determine its encoding}}</ref> और अन्य अस्थायी पहचान तंत्र।
# विशिष्ट अनुक्रमों या बाइट मानों की श्रेणियों और अन्य अस्थायी पहचान तंत्रों की दृष्टि में दस्तावेज़ बाइट्स का विश्लेषण।<ref>{{cite web| url = http://www.w3.org/TR/html5/syntax.html#prescan-a-byte-stream-to-determine-its-encoding| title = HTML5 prescan a byte stream to determine its encoding}}</ref>  


प्रिंट करने योग्य ASCII रेंज (32 से 126) के बाहर वर्ण आमतौर पर गलत तरीके से दिखाई देते हैं। यह [[अंग्रेजी भाषा]] बोलने वाले उपयोगकर्ताओं के लिए कुछ समस्याएं प्रस्तुत करता है, लेकिन अन्य भाषाओं को नियमित रूप से—कुछ मामलों में, हमेशा—उस सीमा के बाहर वर्णों की आवश्यकता होती है। चीनी, जापानी, और कोरियाई ([[सीजेके]]) भाषा वातावरण में जहां उपयोग में कई अलग-अलग मल्टी-बाइट एनकोडिंग हैं, ऑटो-डिटेक्शन भी अक्सर नियोजित होता है। अंत में, ब्राउज़र आमतौर पर उपयोगकर्ता को मैन्युअल रूप से भी गलत चारसेट लेबल को ओवरराइड करने की अनुमति देते हैं।
प्रिंट करने योग्य ASCII श्रेणी (32 से 126) के बाहर वर्ण विशिष्ट रूप से गलत प्रकार से दिखाई देते हैं। यह [[अंग्रेजी भाषा]] बोलने वाले उपयोगकर्ताओं के लिए कुछ समस्याएं प्रस्तुत करता है, लेकिन अन्य भाषाओं को नियमित रूप से—कुछ प्रकरणों में, हमेशा—उस सीमा के बाहर वर्णों की आवश्यकता होती है। चीनी, जापानी, और कोरियाई ([[सीजेके]]) भाषा परिवेश में जहां कई अलग-अलग बहु-बाइट एनकोडिंग हैं, स्वतः-संसूचन भी प्रायः नियोजित होता है। अंत में, ब्राउज़र विशिष्ट रूप से उपयोगकर्ता को गलत चारसमुच्चय लेबल मैन्युअल रूप से भी अध्यारोहण करने की अनुमति देते हैं।


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


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


== अनुमत एन्कोडिंग ==
== अनुमत एन्कोडिंग ==
[[WHATWG]] एन्कोडिंग मानक, हाल के HTML मानकों (वर्तमान WHATWG HTML लिविंग स्टैंडर्ड, साथ ही पूर्व प्रतिस्पर्धी [[W3C]] HTML 5.0 और 5.1) द्वारा संदर्भित एन्कोडिंग की एक सूची निर्दिष्ट करता है जिसे ब्राउज़र को समर्थन करना चाहिए। HTML मानक अन्य एनकोडिंग के समर्थन की मनाही करते हैं।<ref name="html51">{{Cite web |url=https://www.w3.org/TR/html51/syntax.html#character-encodings |title=8.2.2.3. Character encodings |website=HTML 5.1 Standard |publisher=W3C}}</ref><ref name="html50">{{Cite web |url=https://www.w3.org/TR/html5/syntax.html#character-encodings |title=8.2.2.3. Character encodings |website=HTML 5 Standard |publisher=W3C}}</ref><ref name="html5living">{{Cite web |url=https://html.spec.whatwg.org/multipage/parsing.html#character-encodings |title=12.2.3.3 Character encodings |website=HTML Living Standard |publisher=WHATWG}}</ref> एन्कोडिंग मानक आगे यह निर्धारित करता है कि नए प्रारूप, नए प्रोटोकॉल (मौजूदा प्रारूपों का उपयोग किए जाने पर भी) और नए दस्तावेज़ों के लेखकों को यूटीएफ -8 का विशेष रूप से उपयोग करने की आवश्यकता है।<ref name="namesandlabels"/>
HTML मानकों (वर्तमान WHATWG HTML जीवन स्तर, साथ ही पूर्व प्रतिस्पर्धी [[W3C]] HTML 5.0 और 5.1) द्वारा संदर्भित [[WHATWG]] एन्कोडिंग मानक, एन्कोडिंग की एक सूची निर्दिष्ट करता है जिसे ब्राउज़र को समर्थन करना चाहिए। HTML मानक अन्य एनकोडिंग के समर्थन को प्रतिबंधित करते हैं।<ref name="html51">{{Cite web |url=https://www.w3.org/TR/html51/syntax.html#character-encodings |title=8.2.2.3. Character encodings |website=HTML 5.1 Standard |publisher=W3C}}</ref><ref name="html50">{{Cite web |url=https://www.w3.org/TR/html5/syntax.html#character-encodings |title=8.2.2.3. Character encodings |website=HTML 5 Standard |publisher=W3C}}</ref><ref name="html5living">{{Cite web |url=https://html.spec.whatwg.org/multipage/parsing.html#character-encodings |title=12.2.3.3 Character encodings |website=HTML Living Standard |publisher=WHATWG}}</ref> एन्कोडिंग मानक आगे यह निर्धारित करता है कि नए प्रारूप, नए प्रोटोकॉल (प्रचलित प्रारूपों का उपयोग किए जाने पर भी) और नए दस्तावेज़ों के लेखकों को UTF-8 का उपयोग करना आवश्यक है।<ref name="namesandlabels"/>


UTF-8 के अलावा, एन्कोडिंग मानक के संदर्भ में निम्नलिखित एन्कोडिंग स्पष्ट रूप से HTML मानक में ही सूचीबद्ध हैं:<ref name="html5living"/>
UTF-8 के अलावा, एन्कोडिंग मानक के संदर्भ में निम्नलिखित एन्कोडिंग HTML मानक में स्पष्ट रूप से सूचीबद्ध हैं:<ref name="html5living"/>
{{columns-list|colwidth=12em|
{{columns-list|colwidth=12em|
* [[ISO-8859-2]]
* [[ISO-8859-2]]
Line 73: Line 60:
}}{{notelist}}
}}{{notelist}}


निम्नलिखित अतिरिक्त एनकोडिंग एनकोडिंग मानक में सूचीबद्ध हैं, और इसलिए उनके लिए समर्थन भी आवश्यक है:<ref name="namesandlabels">{{cite web |institution=[[WHATWG]] |work=Encoding Standard |last=van Kesteren |first=Anne |author-link=Anne van Kesteren |title=4.2: Names and labels |url=https://encoding.spec.whatwg.org/#names-and-labels}}</ref>
एनकोडिंग मानक में निम्नलिखित अतिरिक्त एनकोडिंग सूचीबद्ध हैं, और इसलिए उनके लिए समर्थन भी आवश्यक है:<ref name="namesandlabels">{{cite web |institution=[[WHATWG]] |work=Encoding Standard |last=van Kesteren |first=Anne |author-link=Anne van Kesteren |title=4.2: Names and labels |url=https://encoding.spec.whatwg.org/#names-and-labels}}</ref>
{{columns-list|colwidth=12em|
{{columns-list|colwidth=12em|
* [[Code page 866]]
* [[Code page 866]]
Line 95: Line 82:
}}{{notelist}}
}}{{notelist}}


निम्नलिखित एनकोडिंग वर्जित एनकोडिंग के स्पष्ट उदाहरण के रूप में सूचीबद्ध हैं:<ref name="html5living"/>
निम्नलिखित एनकोडिंग को निषिद्ध एनकोडिंग के स्पष्ट उदाहरण के रूप में सूचीबद्ध किया गया है:<ref name="html5living"/>
{{columns-list|colwidth=12em|
{{columns-list|colwidth=12em|
* [[CESU-8]]
* [[CESU-8]]
Line 105: Line 92:
}}
}}


मानक एक प्रतिस्थापन डिकोडर को भी परिभाषित करता है, जो [[प्रतिस्थापन चरित्र]] (�) के लिए निश्चित एन्कोडिंग के रूप में लेबल की गई सभी सामग्री को मैप करता है, इसे संसाधित करने से इनकार करता है। इसका उद्देश्य उन हमलों (जैसे [[क्रॉस साइट स्क्रिप्टिंग]]) को रोकना है जो क्लाइंट और सर्वर के बीच अंतर का फायदा उठा सकते हैं कि कौन से एन्कोडिंग दुर्भावनापूर्ण सामग्री को छिपाने के लिए समर्थित हैं।<ref>{{cite web |institution=[[WHATWG]] |work=Encoding Standard |last=van Kesteren |first=Anne |author-link=Anne van Kesteren |url=https://encoding.spec.whatwg.org/#replacement |title=14.1: replacement}}</ref> यद्यपि समान सुरक्षा चिंता [[ISO-2022-JP]] और UTF-16 पर लागू होती है, जो ASCII बाइट्स के अनुक्रमों को अलग तरह से व्याख्या करने की अनुमति देती है, इस दृष्टिकोण को उनके लिए संभव नहीं देखा गया क्योंकि वे तुलनात्मक रूप से तैनात सामग्री में अधिक बार उपयोग किए जाते हैं।<ref>{{cite web |institution=[[WHATWG]] |work=Encoding Standard |last=van Kesteren |first=Anne |author-link=Anne van Kesteren |url=https://encoding.spec.whatwg.org/#security-background |title=2: Security background}}</ref> निम्नलिखित एनकोडिंग इस उपचार को प्राप्त करते हैं:<ref>{{cite web |institution=[[WHATWG]] |work=Encoding Standard |last=van Kesteren |first=Anne |author-link=Anne van Kesteren |title=4.2: Names and labels (§ replacement) |url=https://encoding.spec.whatwg.org/#ref-for-replacement%E2%91%A1}}</ref>
मानक एक "प्रतिस्थापन" विकोडक को भी परिभाषित करता है, जो [[प्रतिस्थापन चरित्र|प्रतिस्थापन वर्ण]] (�) में कुछ एन्कोडिंग के रूप में लेबल की गई सभी विषय को मानचित्र करता है, इसे संसाधित करने से मना करता है। इसका उद्देश्य उन आक्षेप (जैसे [[क्रॉस साइट स्क्रिप्टिंग]]) को रोकना है जो दुर्भावनापूर्ण विषय को छिपाने के लिए उपभोगता और सर्वर के मध्य समर्थित एन्कोडिंग में अंतर का लाभ उठा सकते हैं।<ref>{{cite web |institution=[[WHATWG]] |work=Encoding Standard |last=van Kesteren |first=Anne |author-link=Anne van Kesteren |url=https://encoding.spec.whatwg.org/#replacement |title=14.1: replacement}}</ref> यद्यपि समान सुरक्षा चिंता [[ISO-2022-JP]] और UTF-16 पर उपयोजित होती है, जो ASCII बाइट्स के अनुक्रमों की अलग-अलग व्याख्या करने की भी अनुमति देते हैं, इस दृष्टिकोण को उनके लिए संभव नहीं देखा गया क्योंकि वे तुलनात्मक रूप से प्रसारित विषय में अधिक बार उपयोग किए जाते हैं।<ref>{{cite web |institution=[[WHATWG]] |work=Encoding Standard |last=van Kesteren |first=Anne |author-link=Anne van Kesteren |url=https://encoding.spec.whatwg.org/#security-background |title=2: Security background}}</ref> निम्नलिखित एनकोडिंग इस उपचार को प्राप्त करते हैं:<ref>{{cite web |institution=[[WHATWG]] |work=Encoding Standard |last=van Kesteren |first=Anne |author-link=Anne van Kesteren |title=4.2: Names and labels (§ replacement) |url=https://encoding.spec.whatwg.org/#ref-for-replacement%E2%91%A1}}</ref>
{{columns-list|colwidth=12em|
{{columns-list|colwidth=12em|
* [[ISO-2022-KR]]
* [[ISO-2022-KR]]
Line 113: Line 100:
}}
}}


== चरित्र संदर्भ ==
== वर्ण संदर्भ ==
{{Main|Character entity reference|Numeric character reference}}
{{Main|वर्ण इकाई संदर्भ|संख्यात्मक वर्ण संदर्भ}}


मूल वर्ण एन्कोडिंग के अलावा, वर्णों को वर्ण संदर्भों के रूप में भी एन्कोड किया जा सकता है, जो संख्यात्मक वर्ण संदर्भ ([[दशमलव]] या [[हेक्साडेसिमल]]) या वर्ण इकाई संदर्भ हो सकते हैं। चरित्र इकाई संदर्भों को कभी-कभी नामित संस्थाओं या HTML के लिए HTML संस्थाओं के रूप में भी संदर्भित किया जाता है। HTML के चरित्र संदर्भों का उपयोग [[SGML]] से निकला है।
मूल वर्ण एन्कोडिंग के अलावा, वर्णों को वर्ण संदर्भों के रूप में भी एन्कोड किया जा सकता है, जो संख्यात्मक वर्ण संदर्भ ([[दशमलव]] या [[हेक्साडेसिमल]]) या ''वर्ण इकाई संदर्भ'' हो सकते हैं। वर्ण इकाई संदर्भों को कभी-कभी ''नामित इकाइयों'' या ''HTML'' के लिए ''HTML इकाइयाँ'' भी कहा जाता है। HTML के वर्ण संदर्भों का उपयोग [[SGML]] से हुआ है।


=== HTML वर्ण संदर्भ ===
=== HTML वर्ण संदर्भ ===
<!--Linked from [[Template:Auxiliary template common notice]]-->
एचटीएमएल में एक ''संख्यात्मक वर्ण संदर्भ'' उसके [[यूनिवर्सल कैरेक्टर सेट|सार्वभौमिक संप्रतीक समुच्चय]]/[[यूनिकोड]] ''कोड बिंदु'' द्वारा एक वर्ण को संदर्भित करता है, और प्रारूप का उपयोग करता है
एचटीएमएल में एक संख्यात्मक चरित्र संदर्भ एक चरित्र को उसके [[यूनिवर्सल कैरेक्टर सेट]]/[[यूनिकोड]] कोड बिंदु से संदर्भित करता है, और प्रारूप का उपयोग करता है


:<code>&#''nnnn'';</code>
:<code>&#''nnnn'';</code>
या
या
:<code>&#x''hhhh'';</code>
:<code>&#x''hhhh'';</code>
जहाँ nnnn दशमलव रूप में कोड बिंदु है, और hhhh हेक्साडेसिमल रूप में कोड बिंदु है। एक्स एक्सएमएल दस्तावेजों में लोअरकेस होना चाहिए। एनएनएनएन या एचएचएचएच अंकों की संख्या हो सकती है और इसमें अग्रणी शून्य शामिल हो सकते हैं। hhhh अपरकेस और लोअरकेस को मिला सकता है, हालांकि अपरकेस सामान्य शैली है।
जहाँ ''nnnn'' दशमलव रूप में कोड बिंदु है, और ''hhhh'' हेक्साडेसिमल रूप में कोड बिंदु है। XML दस्तावेजों में ''x'' को छोटे अक्षर होना चाहिए। ''nnnn'' या ''hhhh'' किसी भी संख्या में अंक हो सकते हैं और इसमें अग्रणी शून्य सम्मिलित हो सकते हैं। ''hhhh'' बड़े अक्षर और छोटे अक्षर को मिला सकता है, हालांकि बड़े अक्षर सामान्य शैली है।


HTML दस्तावेज़ों के प्राप्तकर्ता द्वारा उपयोग किए जाने वाले सभी वेब ब्राउज़र या [[ईमेल क्लाइंट]], या HTML दस्तावेज़ों के लेखकों द्वारा उपयोग किए जाने वाले [[पाठ संपादक]], सभी HTML वर्णों को प्रस्तुत करने में सक्षम नहीं होंगे। अधिकांश आधुनिक सॉफ़्टवेयर उपयोगकर्ता की भाषा के लिए अधिकांश या सभी वर्णों को प्रदर्शित करने में सक्षम होते हैं, और उन वर्णों के लिए एक बॉक्स या अन्य स्पष्ट संकेतक बनाते हैं जिन्हें वे प्रस्तुत नहीं कर सकते।
HTML दस्तावेज़ों के प्राप्तकर्ता द्वारा उपयोग किए जाने वाले सभी वेब ब्राउज़र या [[ईमेल क्लाइंट|ईमेल उपभोगता]], या HTML दस्तावेज़ों के लेखकों द्वारा उपयोग किए जाने वाले [[पाठ संपादक|टेक्स्ट संपादक]], सभी HTML वर्णों को प्रस्तुत करने में सक्षम नहीं होंगे। अधिकांश आधुनिक सॉफ़्टवेयर उपयोगकर्ता की भाषा के लिए अधिकांश या सभी वर्णों को प्रदर्शित करने में सक्षम होते हैं, और उन वर्णों के लिए एक बॉक्स या अन्य स्पष्ट संकेतक बनाते हैं जिन्हें वे प्रस्तुत नहीं कर सकते।


0 से 127 तक के कोड के लिए, मूल 7-बिट ASCII मानक सेट, इनमें से अधिकांश वर्णों का उपयोग वर्ण संदर्भ के बिना किया जा सकता है। 160 से 255 तक के सभी कोड XML और HTML वर्ण इकाई संदर्भों की सूची का उपयोग करके बनाए जा सकते हैं। इकाई नामों का उपयोग करके केवल कुछ उच्च संख्या वाले कोड बनाए जा सकते हैं, लेकिन सभी को दशमलव संख्या वर्ण संदर्भ द्वारा बनाया जा सकता है।
0 से 127 तक के कोड के लिए, मूल 7-बिट ASCII मानक समुच्चय, इनमें से अधिकांश वर्णों का उपयोग वर्ण संदर्भ के बिना किया जा सकता है। 160 से 255 तक के सभी कोड वर्ण इकाई संदर्भों की सूची का उपयोग करके बनाए जा सकते हैं। इकाई नामों का उपयोग करके केवल कुछ उच्च संख्या वाले कोड बनाए जा सकते हैं, लेकिन सभी दशमलव संख्या वर्ण संदर्भ द्वारा बनाए जा सकते हैं।


चरित्र इकाई संदर्भों का प्रारूप भी हो सकता है <code>&amp;''name'';</code> जहाँ नाम एक केस-संवेदी अल्फ़ान्यूमेरिक स्ट्रिंग है। उदाहरण के लिए, λ को भी एन्कोड किया जा सकता है <code>&amp;lambda;</code> एक HTML दस्तावेज़ में। चरित्र इकाई संदर्भ <code>&amp;lt;</code>, <code>&amp;gt;</code>, <code>&amp;quot;</code> और <code>&amp;amp;</code> HTML और SGML में पूर्वनिर्धारित होते हैं, क्योंकि <code>&lt;</code>, <code>&gt;</code>, <code>"</code> और <code>&amp;</code> मार्कअप को परिसीमित करने के लिए पहले से ही उपयोग किया जाता है। इसमें विशेष रूप से एक्सएमएल शामिल नहीं था <code>&amp;apos;</code> (') HTML5 से पहले की इकाई। सभी नामित HTML वर्ण इकाई संदर्भों की सूची के साथ-साथ उन संस्करणों के लिए जिनमें वे पेश किए गए थे, XML और HTML वर्ण इकाई संदर्भों की सूची देखें।
वर्ण इकाई संदर्भों का प्रारूप <code>&amp;''name''</code>भी हो सकता है;  जहाँ नाम एक प्रकरण-संवेदी अक्षरांकीय स्ट्रिंग है। उदाहरण के लिए, <nowiki>''</nowiki>λ<nowiki>''</nowiki> को HTML दस्तावेज़ में <code>&amp;lambda</code> के रूप में भी एन्कोड किया जा सकता है। वर्ण इकाई संदर्भ <code>&amp;lt;</code>, <code>&amp;gt;</code>, <code>&amp;quot;</code> और <code>&amp;amp;</code> HTML और SGML में पूर्वनिर्धारित हैं, क्योंकि <code>&lt;</code>, <code>&gt;</code>, <code>"</code> और <code>&amp;</code> का उपयोग पहले से ही मार्कअप को सीमित करने के लिए किया जाता है। इसमें विशेष रूप से XML का <code>&amp;apos</code>सम्मिलित नहीं हैं;  (') HTML5 से पहले की इकाई में सम्मिलित नहीं हैं। सभी नामित HTML वर्ण इकाई संदर्भों की सूची के साथ-साथ उन संस्करणों की सूची के लिए जिनमें वे प्रस्तावित किए गए थे, XML और HTML वर्ण इकाई संदर्भों की सूची देखें।


HTML वर्ण संदर्भों का अनावश्यक उपयोग HTML पठनीयता को महत्वपूर्ण रूप से कम कर सकता है। यदि किसी वेब पेज के लिए वर्ण एन्कोडिंग उचित रूप से चुना गया है, तो HTML वर्ण संदर्भ आमतौर पर केवल ऊपर बताए गए मार्कअप परिसीमन वर्णों के लिए आवश्यक होते हैं, और कुछ विशेष वर्णों के लिए (या बिल्कुल नहीं, यदि मूल यूनिकोड एन्कोडिंग जैसे UTF-8 का उपयोग किया जाता है) ). गलत HTML इकाई से बचने से [[ क्रॉस साइट स्क्रिप्टिंग ]] जैसे इंजेक्शन हमलों के लिए सुरक्षा भेद्यताएं भी खुल सकती हैं। यदि HTML एट्रिब्यूट्स को बिना कोट किए छोड़ दिया जाता है, तो कुछ कैरेक्टर्स, सबसे महत्वपूर्ण [[ व्हाइटस्पेस चरित्र ]], जैसे कि स्पेस और टैब, को एंटिटीज का उपयोग करके बचाना चाहिए। HTML से संबंधित अन्य भाषाओं में पात्रों से बचने के अपने तरीके हैं।
HTML वर्ण संदर्भों का अनावश्यक उपयोग HTML पठनीयता को महत्वपूर्ण रूप से कम कर सकता है। यदि किसी वेब पेज के लिए वर्ण एन्कोडिंग उचित रूप से चयन किया गया है, तो HTML वर्ण संदर्भ विशिष्ट रूप से केवल ऊपर बताए गए मार्कअप विसीमक वर्णों के लिए आवश्यक होते हैं, और कुछ विशेष वर्णों के लिए (या बिल्कुल नहीं, यदि UTF-8 जैसे मूल यूनिकोड एन्कोडिंग का उपयोग किया जाता है)गलत HTML इकाई से बचने से [[ क्रॉस साइट स्क्रिप्टिंग |क्रॉस साइट स्क्रिप्टिंग]] जैसे अंतःक्षेपी अटैक के लिए सुरक्षा भेद्यताएं भी खुल सकती हैं। यदि HTML विशेषताओं को बिना कोट किए छोड़ दिया जाता है, तो कुछ वर्ण, सबसे महत्वपूर्ण[[ व्हाइटस्पेस चरित्र | व्हाइटस्पेस वर्ण]], जैसे कि स्पेस और टैब, को इकाई का उपयोग करके बचाना चाहिए। HTML से संबंधित अन्य भाषाओं में वर्णों से बचने के अपने प्रकार हैं।


=== एक्सएमएल चरित्र संदर्भ ===
=== XML वर्ण संदर्भ ===
वर्ण इकाई संदर्भों की अपनी बड़ी श्रृंखला के साथ पारंपरिक HTML के विपरीत, XML में केवल पाँच पूर्वनिर्धारित वर्ण इकाई संदर्भ हैं। इनका उपयोग उन वर्णों से बचने के लिए किया जाता है जो कुछ संदर्भों में मार्कअप संवेदनशील होते हैं:<ref>{{citation |chapter-url=http://www.w3.org/TR/REC-xml/#sec-references |chapter=Character and Entity References |title=XML |first1=T. |last1=Bray |author-link1=Tim Bray |first2=J. |last2=Paoli |first3=C. |last3=Sperberg-McQueen |author-link3=Michael Sperberg-McQueen |first4=E. |last4=Maler |first5=F. |last5=Yergeau |publisher=[[W3C]] |date=26 November 2008 |access-date=8 March 2010}}</ref>
वर्ण इकाई संदर्भों की बड़ी श्रृंखला के साथ पारंपरिक HTML के विपरीत, XML में केवल पाँच पूर्वनिर्धारित वर्ण इकाई संदर्भ हैं। इनका उपयोग उन वर्णों से बचने के लिए किया जाता है जो कुछ संदर्भों में मार्कअप संवेदक होते हैं:<ref>{{citation |chapter-url=http://www.w3.org/TR/REC-xml/#sec-references |chapter=Character and Entity References |title=XML |first1=T. |last1=Bray |author-link1=Tim Bray |first2=J. |last2=Paoli |first3=C. |last3=Sperberg-McQueen |author-link3=Michael Sperberg-McQueen |first4=E. |last4=Maler |first5=F. |last5=Yergeau |publisher=[[W3C]] |date=26 November 2008 |access-date=8 March 2010}}</ref>
*<code>&amp;amp;</code> → और ([[एम्परसेंड]], यू+0026)
*<code>&amp;amp;</code> → & ([[एम्परसेंड]], U+0026)
*<code>&amp;lt;</code> → < (इससे कम चिह्न, U+003C)
*<code>&amp;lt;</code> → < (इससे कम चिह्न, U+003C)
*<code>&amp;gt;</code> → > (ग्रेटर दैन साइन, U+003E)
*<code>&amp;gt;</code> → > (इससे अधिक चिह्न, U+003E)
*<code>&amp;quot;</code> → (उद्धरण चिह्न, U+0022)
*<code>&amp;quot;</code> → (उद्धरण चिह्न, U+0022)
*<code>&amp;apos;</code> → ' (एपोस्ट्रोफी, यू+0027)
*<code>&amp;apos;</code> → ' (लोपचिह्न, U+0027)


अन्य सभी वर्ण इकाई संदर्भों को उपयोग किए जाने से पहले परिभाषित किया जाना चाहिए। उदाहरण के लिए, का उपयोग <code>&amp;eacute;</code> (जो é देता है, लैटिन लोअर-केस E एक्यूट एक्सेंट के साथ, यूनिकोड में U+00E9) एक XML दस्तावेज़ में एक त्रुटि उत्पन्न करेगा जब तक कि इकाई पहले से ही परिभाषित नहीं की गई हो। XML के लिए यह भी आवश्यक है कि <code>x</code> हेक्साडेसिमल में संख्यात्मक संदर्भ लोअरकेस में हों: उदाहरण के लिए <code>&amp;#xA1b</code> इसके बजाय <code>&amp;#XA1b</code>. XHTML, जो एक XML अनुप्रयोग है, XML की पूर्वनिर्धारित संस्थाओं के साथ HTML इकाई सेट का समर्थन करता है।
अन्य सभी वर्ण इकाई संदर्भों को उपयोग किए जाने से पहले परिभाषित करना होगा। उदाहरण के लिए, <code>&amp;eacute; का उपयोग</code>(जो एक XML दस्तावेज़ में é, तीव्र उच्चारण के साथ लैटिन लोअर-केस E, यूनिकोड में U+00E9 देता है) एक त्रुटि उत्पन्न करेगा जब तक कि इकाई को पहले से ही परिभाषित नहीं किया है। XML के लिए यह भी आवश्यक है कि हेक्साडेसिमल संख्यात्मक संदर्भ में <code>x</code>लोअरकेस में हों: उदाहरण के लिए <code>&amp;#xA1b</code> के बदले <code>&amp;#XA1b है।</code>XHTML, जो एक XML अनुप्रयोग है, XML की पूर्वनिर्धारित इकाइयों के साथ HTML इकाई समुच्चय का समर्थन करता है।


== यह भी देखें ==
== यह भी देखें ==
* [[चारसेट सूँघना]] - कई ब्राउज़रों द्वारा उपयोग किया जाता है जब वर्ण एन्कोडिंग मेटाडेटा उपलब्ध नहीं होता है
* [[चारसेट सूँघना|चारसमुच्चय सूँघना]] - कई ब्राउज़रों द्वारा उपयोग किया जाता है जब वर्ण एन्कोडिंग मेटाडेटा उपलब्ध नहीं होता है
* [[यूनिकोड और एचटीएमएल]]
* [[यूनिकोड और एचटीएमएल|यूनिकोड और HTML]]
* [[भाषा कोड]]
* [[भाषा कोड]]
* एक्सएमएल और एचटीएमएल चरित्र इकाई संदर्भों की सूची
* XML और HTML वर्ण इकाई संदर्भों की सूची


== संदर्भ ==
== संदर्भ ==
{{Reflist}}
{{Reflist}}


== बाहरी संबंध ==
== बाहरी संबंध ==

Revision as of 16:21, 28 June 2023

जबकि हाइपरटेक्स्ट मार्कअप भाषा (एचटीएमएल) 1991 से उपयोग में है, दिसंबर 1997 से एचटीएमएल 4.0 पहला मानकीकृत संस्करण था जहां अंतर्राष्ट्रीय पात्रों (कंप्यूटिंग) उचित रूप से पूर्ण उपचार दिया गया था। जब एक HTML दस्तावेज़ में सात-बिट ASCII की सीमा के बाहर विशेष वर्ण सम्मिलित होते हैं, तो दो लक्ष्य विचार करने योग्य होते हैं: सूचना की अखंडता, और सार्वभौमिक ब्राउज़र प्रदर्शन होते हैं।

दस्तावेज़ के वर्ण एन्कोडिंग को निर्दिष्ट करना

यह निर्दिष्ट करने के दो सामान्य प्रकार हैं कि दस्तावेज़ में किस वर्ण एन्कोडिंग का उपयोग किया गया है।

सबसे पहले, वेब सर्वर हाइपरटेक्स्ट परहस्त प्रोटोकॉल (HTTP) विषय-प्रकार हेडर वर्ण एन्कोडिंग या "चारसमुच्चय" में सम्मिलित कर सकता है, जो विशिष्ट रूप से इस तरह दिखेगा:[1]

विषय -प्रकार: text/html; charset=utf-8

यह विधि HTTP सर्वर को विषय वार्ता के अनुसार दस्तावेज़ की एन्कोडिंग को बदलने का एक सुविधाजनक प्रकार देती है; कुछ HTTP सर्वर सॉफ़्टवेयर ऐसा कर सकते हैं, उदाहरण के लिए अपाचे मॉड्यूल की सूची mod_charset_lite के साथ है।[2]

दूसरा, एक घोषणा को दस्तावेज़ में ही सम्मिलित किया जा सकता है।

HTML के लिए इस जानकारी को दस्तावेज़ के शीर्ष के पास मुख्य तत्व के अंदर सम्मिलित करना संभव है:[3]

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

HTML5 निम्नलिखित वाक्यविन्यास को भी बिल्कुल वही अर्थ देने की अनुमति देता है:[3]

<meta charset="utf-8">

XHTML दस्तावेज़ों में एक तीसरा विकल्प है: XML घोषणा के माध्यम से वर्ण एन्कोडिंग को व्यक्त करना, इस प्रकार:[4]

<?xml version="1.0" encoding="utf-8"?>

इस दूसरे दृष्टिकोण के साथ, क्योंकि घोषणा को पार्स किए जाने तक वर्ण एन्कोडिंग को नहीं जाना जा सकता है, इसलिए यह जानने में समस्या होती है कि दस्तावेज़ में घोषणा तक और इसमें कौन सा वर्ण एन्कोडिंग का उपयोग किया गया है। यदि वर्ण एन्कोडिंग एक ASCII विस्तार है तो घोषणा तक का विषय शुद्ध ASCI होनी चाहिए और यह सही प्रकार से काम करेगी। वर्ण एन्कोडिंग के लिए जो ASCII विस्तार नहीं हैं (अर्थात ASCII का अधिसमुच्चय नहीं), जैसे कि UTF-16BE और UTF-16LE, HTML का एक प्रोसेसर, जैसे कि वेब ब्राउज़र, कुछ प्रकरणो में ह्यूरिस्टिक्स के उपयोग के माध्यम से घोषणा को पार्स करने में सक्षम होना चाहिए।

एन्कोडिंग संसूचन एल्गोरिदम

HTML5 के अनुसार अनुशंसित चारसमुच्चय UTF-8 है।[3] इनपुट के कई स्रोतों के आधार पर दस्तावेज़ के वर्ण एन्कोडिंग को निर्धारित करने के लिए विनिर्देश में एक ''एन्कोडिंग स्नीफिंग एल्गोरिदम'' को परिभाषित किया गया है, जिसमें सम्मिलित हैं:

  1. स्पष्ट उपयोगकर्ता निर्देश
  2. दस्तावेज़ के पहले 1024 बाइट्स के अंतर्गत एक स्पष्ट मेटा टैग
  3. दस्तावेज़ के पहले तीन बाइट्स के अंतर्गत एक बाइट अनुक्रम मार्क (BOM)।
  4. HTTP विषय-प्रकार या अन्य परिवहन परत की जानकारी
  5. विशिष्ट अनुक्रमों या बाइट मानों की श्रेणियों और अन्य अस्थायी पहचान तंत्रों की दृष्टि में दस्तावेज़ बाइट्स का विश्लेषण।[5]

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

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

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

अनुमत एन्कोडिंग

HTML मानकों (वर्तमान WHATWG HTML जीवन स्तर, साथ ही पूर्व प्रतिस्पर्धी W3C HTML 5.0 और 5.1) द्वारा संदर्भित WHATWG एन्कोडिंग मानक, एन्कोडिंग की एक सूची निर्दिष्ट करता है जिसे ब्राउज़र को समर्थन करना चाहिए। HTML मानक अन्य एनकोडिंग के समर्थन को प्रतिबंधित करते हैं।[6][7][8] एन्कोडिंग मानक आगे यह निर्धारित करता है कि नए प्रारूप, नए प्रोटोकॉल (प्रचलित प्रारूपों का उपयोग किए जाने पर भी) और नए दस्तावेज़ों के लेखकों को UTF-8 का उपयोग करना आवश्यक है।[9]

UTF-8 के अलावा, एन्कोडिंग मानक के संदर्भ में निम्नलिखित एन्कोडिंग HTML मानक में स्पष्ट रूप से सूचीबद्ध हैं:[8]

  1. Also specified for TIS-620, ISO-8859-11 and related labels.[9]
  2. Also specified for ASCII, ISO-8859-1 and related labels.[9]
  3. Also specified for ISO-8859-9 and related labels.[9]
  4. Specified with 0xA3A0 as a duplicate encoding of the ideographic space (U+3000) for compatibility reasons, and as such excluding U+E5E5 (a private use character).[10][11] Also, specified with 0x80 accepted as an alternative encoding of the euro sign (U+20AC; see Windows-936).[12] Otherwise, follows the mappings from the 2005 standard.[11]
  5. Hong Kong Supplementary Character Set variant, although most of the HKSCS extensions (those with lead bytes less than 0xA1) are not included by the encoder, only by the decoder.[13]
  6. The specification includes IBM and NEC extensions (see Windows-31J).[14]
  7. The specification uses the same index as used for Shift JIS (insofar as is within reach), i.e. includes NEC extensions. Half-width kana is converted to fullwidth by the encoder,[15] but accepted using an escape sequence (ESC 0x28 0x49) by the decoder.[16] Shift Out and Shift In (0x0E and 0x0F) are excluded entirely to prevent attacks.[16][17]
  8. Actually Unified Hangul Code, which is a superset which covers the entire Hangul Syllables block.[18]
  9. Specified for decoding only; form submissions from UTF-16-coded documents are to be encoded in UTF-8.[19]
  10. For compatibility with deployed content, also specified for the plain UTF-16 label,[20] although a byte order mark (BOM), if present, takes priority over any label.[21] Specified for decoding only; form submissions from UTF-16-coded documents are to be encoded in UTF-8.[19]
  11. Maps 0x00 through 0x7F to U+0000 through U+007F, and 0x80 through 0xFF to U+F780 through U+F7FF (a Private Use Area range), such that the low 8 bits of the code point always match the original byte.[22]

एनकोडिंग मानक में निम्नलिखित अतिरिक्त एनकोडिंग सूचीबद्ध हैं, और इसलिए उनके लिए समर्थन भी आवश्यक है:[9]

  1. Uses the same encoder and decoder as ISO-8859-8, but is not subject to the visual-order behaviour which is used for documents labelled as ISO-8859-8.[23]
  2. Titled KOI8-U and specified for both KOI8-U and KOI8-RU labels,[9] but follows KOI8-RU (i.e. includes Ў/ў).[24][25]
  3. Also specified for GB2312 and related labels. Handled the same as GB 18030 for decoding purposes.[26] For encoding purposes, labelling as GBK (or GB 2312) excludes four-byte codes, and favours the one-byte 0x80 representation for U+20AC.[10]
  4. The specification uses the same index as used for Shift JIS (insofar as is within reach of the EUC code set 1), i.e. includes NEC extensions. JIS X 0212 is included for decoding only.[27]

निम्नलिखित एनकोडिंग को निषिद्ध एनकोडिंग के स्पष्ट उदाहरण के रूप में सूचीबद्ध किया गया है:[8]

मानक एक "प्रतिस्थापन" विकोडक को भी परिभाषित करता है, जो प्रतिस्थापन वर्ण (�) में कुछ एन्कोडिंग के रूप में लेबल की गई सभी विषय को मानचित्र करता है, इसे संसाधित करने से मना करता है। इसका उद्देश्य उन आक्षेप (जैसे क्रॉस साइट स्क्रिप्टिंग) को रोकना है जो दुर्भावनापूर्ण विषय को छिपाने के लिए उपभोगता और सर्वर के मध्य समर्थित एन्कोडिंग में अंतर का लाभ उठा सकते हैं।[28] यद्यपि समान सुरक्षा चिंता ISO-2022-JP और UTF-16 पर उपयोजित होती है, जो ASCII बाइट्स के अनुक्रमों की अलग-अलग व्याख्या करने की भी अनुमति देते हैं, इस दृष्टिकोण को उनके लिए संभव नहीं देखा गया क्योंकि वे तुलनात्मक रूप से प्रसारित विषय में अधिक बार उपयोग किए जाते हैं।[29] निम्नलिखित एनकोडिंग इस उपचार को प्राप्त करते हैं:[30]

वर्ण संदर्भ

मूल वर्ण एन्कोडिंग के अलावा, वर्णों को वर्ण संदर्भों के रूप में भी एन्कोड किया जा सकता है, जो संख्यात्मक वर्ण संदर्भ (दशमलव या हेक्साडेसिमल) या वर्ण इकाई संदर्भ हो सकते हैं। वर्ण इकाई संदर्भों को कभी-कभी नामित इकाइयों या HTML के लिए HTML इकाइयाँ भी कहा जाता है। HTML के वर्ण संदर्भों का उपयोग SGML से हुआ है।

HTML वर्ण संदर्भ

एचटीएमएल में एक संख्यात्मक वर्ण संदर्भ उसके सार्वभौमिक संप्रतीक समुच्चय/यूनिकोड कोड बिंदु द्वारा एक वर्ण को संदर्भित करता है, और प्रारूप का उपयोग करता है

&#nnnn;

या

&#xhhhh;

जहाँ nnnn दशमलव रूप में कोड बिंदु है, और hhhh हेक्साडेसिमल रूप में कोड बिंदु है। XML दस्तावेजों में x को छोटे अक्षर होना चाहिए। nnnn या hhhh किसी भी संख्या में अंक हो सकते हैं और इसमें अग्रणी शून्य सम्मिलित हो सकते हैं। hhhh बड़े अक्षर और छोटे अक्षर को मिला सकता है, हालांकि बड़े अक्षर सामान्य शैली है।

HTML दस्तावेज़ों के प्राप्तकर्ता द्वारा उपयोग किए जाने वाले सभी वेब ब्राउज़र या ईमेल उपभोगता, या HTML दस्तावेज़ों के लेखकों द्वारा उपयोग किए जाने वाले टेक्स्ट संपादक, सभी HTML वर्णों को प्रस्तुत करने में सक्षम नहीं होंगे। अधिकांश आधुनिक सॉफ़्टवेयर उपयोगकर्ता की भाषा के लिए अधिकांश या सभी वर्णों को प्रदर्शित करने में सक्षम होते हैं, और उन वर्णों के लिए एक बॉक्स या अन्य स्पष्ट संकेतक बनाते हैं जिन्हें वे प्रस्तुत नहीं कर सकते।

0 से 127 तक के कोड के लिए, मूल 7-बिट ASCII मानक समुच्चय, इनमें से अधिकांश वर्णों का उपयोग वर्ण संदर्भ के बिना किया जा सकता है। 160 से 255 तक के सभी कोड वर्ण इकाई संदर्भों की सूची का उपयोग करके बनाए जा सकते हैं। इकाई नामों का उपयोग करके केवल कुछ उच्च संख्या वाले कोड बनाए जा सकते हैं, लेकिन सभी दशमलव संख्या वर्ण संदर्भ द्वारा बनाए जा सकते हैं।

वर्ण इकाई संदर्भों का प्रारूप &nameभी हो सकता है; जहाँ नाम एक प्रकरण-संवेदी अक्षरांकीय स्ट्रिंग है। उदाहरण के लिए, ''λ'' को HTML दस्तावेज़ में &lambda के रूप में भी एन्कोड किया जा सकता है। वर्ण इकाई संदर्भ &lt;, &gt;, &quot; और &amp; HTML और SGML में पूर्वनिर्धारित हैं, क्योंकि <, >, " और & का उपयोग पहले से ही मार्कअप को सीमित करने के लिए किया जाता है। इसमें विशेष रूप से XML का &aposसम्मिलित नहीं हैं; (') HTML5 से पहले की इकाई में सम्मिलित नहीं हैं। सभी नामित HTML वर्ण इकाई संदर्भों की सूची के साथ-साथ उन संस्करणों की सूची के लिए जिनमें वे प्रस्तावित किए गए थे, XML और HTML वर्ण इकाई संदर्भों की सूची देखें।

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

XML वर्ण संदर्भ

वर्ण इकाई संदर्भों की बड़ी श्रृंखला के साथ पारंपरिक HTML के विपरीत, XML में केवल पाँच पूर्वनिर्धारित वर्ण इकाई संदर्भ हैं। इनका उपयोग उन वर्णों से बचने के लिए किया जाता है जो कुछ संदर्भों में मार्कअप संवेदक होते हैं:[31]

  • &amp; → & (एम्परसेंड, U+0026)
  • &lt; → < (इससे कम चिह्न, U+003C)
  • &gt; → > (इससे अधिक चिह्न, U+003E)
  • &quot; → (उद्धरण चिह्न, U+0022)
  • &apos; → ' (लोपचिह्न, U+0027)

अन्य सभी वर्ण इकाई संदर्भों को उपयोग किए जाने से पहले परिभाषित करना होगा। उदाहरण के लिए, &eacute; का उपयोग(जो एक XML दस्तावेज़ में é, तीव्र उच्चारण के साथ लैटिन लोअर-केस E, यूनिकोड में U+00E9 देता है) एक त्रुटि उत्पन्न करेगा जब तक कि इकाई को पहले से ही परिभाषित नहीं किया है। XML के लिए यह भी आवश्यक है कि हेक्साडेसिमल संख्यात्मक संदर्भ में xलोअरकेस में हों: उदाहरण के लिए &#xA1b के बदले &#XA1b है।XHTML, जो एक XML अनुप्रयोग है, XML की पूर्वनिर्धारित इकाइयों के साथ HTML इकाई समुच्चय का समर्थन करता है।

यह भी देखें

संदर्भ

  1. Fielding, R.; Reschke, J. (June 2014), "Content-Type", in Fielding, R; Reschke, J (eds.), Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content, IETF, doi:10.17487/RFC7231, S2CID 14399078, retrieved 2014-07-30
  2. "Apache Module mod_charset_lite".
  3. 3.0 3.1 3.2 "Specifying the document's character encoding", HTML5, World Wide Web Consortium, 14 December 2017, retrieved 2018-05-28
  4. Bray, T.; Paoli, J.; Sperberg-McQueen, C.; Maler, E.; Yergeau, F. (26 November 2008), "Prolog and Document Type Declaration", XML, W3C, retrieved 8 March 2010
  5. "HTML5 prescan a byte stream to determine its encoding".
  6. "8.2.2.3. Character encodings". HTML 5.1 Standard. W3C.
  7. "8.2.2.3. Character encodings". HTML 5 Standard. W3C.
  8. 8.0 8.1 8.2 "12.2.3.3 Character encodings". HTML Living Standard. WHATWG.
  9. 9.0 9.1 9.2 9.3 9.4 9.5 van Kesteren, Anne. "4.2: Names and labels". Encoding Standard. WHATWG.
  10. 10.0 10.1 van Kesteren, Anne. "10.2.2. gb18030 encoder". Encoding Standard. WHATWG.
  11. 11.0 11.1 van Kesteren, Anne. "5. Indexes (§ index gb18030)". Encoding Standard. WHATWG.
  12. van Kesteren, Anne. "10.2.1. gb18030 decoder". Encoding Standard. WHATWG.
  13. van Kesteren, Anne. "5. Indexes (§ index Big5 pointer)". Encoding Standard. WHATWG.
  14. van Kesteren, Anne. "5. Indexes (§ Index jis0208)". Encoding Standard. WHATWG.
  15. van Kesteren, Anne. "5. Indexes (§ Index ISO-2022-JP katakana)". Encoding Standard. WHATWG.
  16. 16.0 16.1 van Kesteren, Anne. "12.2.1. ISO-2022-JP decoder". Encoding Standard. WHATWG.
  17. van Kesteren, Anne. "12.2.2. ISO-2022-JP encoder". Encoding Standard. WHATWG.
  18. van Kesteren, Anne. "5. Indexes (§ index EUC-KR)". Encoding Standard. WHATWG.
  19. 19.0 19.1 van Kesteren, Anne. "4.3. Output encodings". Encoding Standard. WHATWG.
  20. van Kesteren, Anne. "14.4. UTF-16LE". Encoding Standard. WHATWG.
  21. van Kesteren, Anne. "6. Hooks for standards (§ decode)". Encoding Standard. WHATWG.
  22. van Kesteren, Anne. "14.5. x-user-defined". Encoding Standard. WHATWG.
  23. van Kesteren, Anne. "9. Legacy single-byte encodings (§ Note)". Encoding Standard. WHATWG.
  24. van Kesteren, Anne. "index KOI8-U visualization". Encoding Standard. WHATWG.
  25. "Bug 17053: Support KOI8-RU mapping for KOI8-U". W3C Bugzilla. 2015-08-19.
  26. van Kesteren, Anne. "10.1. GBK". Encoding Standard. WHATWG.
  27. van Kesteren, Anne. "5. Indexes (§ Index jis0212)". Encoding Standard. WHATWG.
  28. van Kesteren, Anne. "14.1: replacement". Encoding Standard. WHATWG.
  29. van Kesteren, Anne. "2: Security background". Encoding Standard. WHATWG.
  30. van Kesteren, Anne. "4.2: Names and labels (§ replacement)". Encoding Standard. WHATWG.
  31. Bray, T.; Paoli, J.; Sperberg-McQueen, C.; Maler, E.; Yergeau, F. (26 November 2008), "Character and Entity References", XML, W3C, retrieved 8 March 2010

बाहरी संबंध