UTF-8 और ISO-8859-1 में क्या अंतर है ?
UTF-8 और ISO-8859-1 में क्या अंतर है ?
जवाबों:
UTF-8 एक मल्टीबैट एन्कोडिंग है जो किसी भी यूनिकोड वर्ण का प्रतिनिधित्व कर सकता है। आईएसओ 8859-1 एक एकल-बाइट एन्कोडिंग है जो पहले 256 यूनिकोड वर्णों का प्रतिनिधित्व कर सकता है। दोनों ASCII को ठीक उसी तरह से एनकोड करते हैं।
विकिपीडिया दोनों को यथोचित रूप से समझाता है: UTF-8 बनाम लैटिन -1 (ISO-8859-1)। पूर्व एक चर-लंबाई एन्कोडिंग है, बाद वाला एकल-बाइट निश्चित लंबाई एन्कोडिंग है। लैटिन -1 यूनिकोड वर्ण सेट के पहले 256 कोड बिंदुओं को एन्कोड करता है, जबकि UTF-8 का उपयोग अन्य कोड बिंदुओं को एनकोड करने के लिए किया जा सकता है। भौतिक एन्कोडिंग स्तर पर, केवल कोडपॉइंट्स 0 - 127 अनौपचारिक रूप से एन्कोडेड हो जाते हैं; कोड अंक 128 - 255 यूटीएफ -8 के साथ 2-बाइट अनुक्रम बनने से भिन्न होते हैं, जबकि वे लैटिन -1 के साथ एकल बाइट्स होते हैं।
UTF मल्टी-बाइट एन्कोडिंग योजनाओं का एक परिवार है जो यूनिकोड कोड बिंदुओं का प्रतिनिधित्व कर सकता है जो 2 ^ 31 [लगभग 2 बिलियन] वर्णों का प्रतिनिधि हो सकता है। UTF-8 एक लचीली एन्कोडिंग प्रणाली है जो पहले 2 ^ 21 [लगभग 2 मिलियन] कोड बिंदुओं का प्रतिनिधित्व करने के लिए 1 और 4 बाइट्स के बीच का उपयोग करती है।
लंबी कहानी छोटी: 127 से नीचे एक कोड बिंदु / क्रमिक प्रतिनिधित्व वाला कोई भी चरित्र, उर्फ 7-बिट-सुरक्षित एएससीआईआई को 1-बाइट अनुक्रम द्वारा सबसे अन्य एकल-बाइट एन्कोडिंग के रूप में दर्शाया गया है। 127 से ऊपर कोड बिंदु वाले किसी भी चरित्र को दो या अधिक बाइट्स के अनुक्रम द्वारा दर्शाया गया है, एन्कोडिंग के विवरण के साथ यहां सबसे अच्छा समझाया गया है ।
ISO-8859 एकल-बाइट एन्कोडिंग योजनाओं का एक परिवार है जिसका उपयोग वर्णमाला का प्रतिनिधित्व करने के लिए किया जाता है जिसे 127 से 255 के भीतर दर्शाया जा सकता है। इन विभिन्न वर्णमालाओं को ISO-8859- n प्रारूप में "भागों" के रूप में परिभाषित किया गया है , जो सबसे अधिक परिचित हैं। इनकी संभावना ISO-8859-1 उर्फ 'लैटिन -1' है। यूटीएफ -8 के साथ, 7-बिट-सुरक्षित एएससीआईआई का उपयोग किए गए एन्कोडिंग परिवार की परवाह किए बिना अप्रभावित रहता है।
इस एन्कोडिंग योजना की खामी 128 से अधिक प्रतीकों वाली भाषाओं को समायोजित करना या एक समय में प्रतीकों के एक से अधिक परिवारों को सुरक्षित रूप से प्रदर्शित करने में असमर्थता है। साथ ही, ISO-8859 एनकोडिंग UTF के उदय के पक्ष में हो गए हैं। इसका प्रभारी आईएसओ "वर्किंग ग्रुप" 2004 में भंग कर दिया गया, जिससे इसके मूल उपसमिति तक रखरखाव हो गया।
ASCII: 7 बिट्स। 128 कोड अंक।
आईएसओ-8859-1: 8 बिट्स। 256 कोड अंक।
UTF-8: 8-32 बिट्स (1-4 बाइट्स)। 1,112,064 कोड अंक।
ISO-8859-1 और UTF-8 दोनों ASCII के साथ संगत हैं, लेकिन UTF-8 ISO-8859-1 के साथ पीछे की ओर संगत नहीं है:
#!/usr/bin/env python3
c = chr(0xa9)
print(c)
print(c.encode('utf-8'))
print(c.encode('iso-8859-1'))
आउटपुट:
©
b'\xc2\xa9'
b'\xa9'
ISO-8859-1 1980 के दशक में वापस से एक विरासत मानक है। यह केवल 256 वर्णों का प्रतिनिधित्व कर सकता है इसलिए केवल पश्चिमी दुनिया की कुछ भाषाओं के लिए उपयुक्त है। यहां तक कि कई समर्थित भाषाओं के लिए, कुछ अक्षर गायब हैं। यदि आप इस एन्कोडिंग में एक पाठ फ़ाइल बनाते हैं और कुछ चीनी अक्षरों को कॉपी / पेस्ट करते हैं, तो आपको अजीब परिणाम दिखाई देंगे। इसलिए दूसरे शब्दों में, इसका उपयोग न करें। यूनिकोड ने दुनिया भर में ले लिया है और इन दिनों UTF-8 बहुत अधिक मानक है जब तक कि आपके पास कुछ विरासत कारण नहीं हैं (जैसे HTTP हेडर जो कि सब कुछ के साथ संगत करने की आवश्यकता है)।
एक अन्य दृष्टिकोण से, यूनिकोड और एससीआई एन्कोडिंग दोनों फाइलें पढ़ने में असफल हो जाती हैं क्योंकि उनमें एक बाइट 0xc0
होती है, यह iso-8859-1 द्वारा ठीक से पढ़ी गई लगती है। चेतावनी यह है कि फ़ाइल में बेशक यूनिकोड वर्ण नहीं होना चाहिए।
महसूस करने के लिए एक और महत्वपूर्ण बात: यदि आप देखते हैं iso-8859-1
, तो यह संभवतः ISO / IEC 8859-1 के बजाय Windows-1252 को संदर्भित करता है । वे 0x80–0x9F श्रेणी में भिन्न होते हैं, जहाँ ISO 8859-1 में C1 नियंत्रण कोड हैं, और Windows-1252 में इसके बजाय उपयोगी दृश्य वर्ण हैं।
उदाहरण के लिए, आईएसओ 8859-1 में एक नियंत्रण चरित्र के रूप में 0x85 (यूनिकोड, यू + 0085, ``) में है, जबकि विंडोज -1252 में एक क्षैतिज दीर्घवृत्त (यूनिकोड, यू + 2026 हॉर्टिकल्चर ELLIPSIS) में है। …
) में है।
WHATWG एन्कोडिंग कल्पना (HTML के रूप में नहीं होता) स्पष्ट रूप से घोषणा करता है iso-8859-1
के लिए एक लेबल होना करने के लिए windows-1252
, और वेब ब्राउज़र किसी भी तरह से आईएसओ 8859-1 का समर्थन नहीं करते: HTML कल्पना का कहना है कि एन्कोडिंग कल्पना में सभी एन्कोडिंग समर्थन किया जाना चाहिए, और कोई और अधिक ।
ब्याज की भी, HTML संख्यात्मक चरित्र संदर्भ अनिवार्य रूप से यूनिकोड कोड बिंदुओं के बजाय 8-बिट मूल्यों के लिए Windows-1252 का उपयोग करते हैं; प्रति https://html.spec.whatwg.org/#numeric-character-reference-end-state , …
U + 0085 के बजाय U + 2026 का उत्पादन करेगा।
इस प्रश्न पर शोध करने का मेरा कारण यह था कि वे किस तरह से संगत हैं। लैटिन 1 चारसेट (iso-8859) एक utf8 डेटास्टोर में संग्रहीत होने के लिए 100% संगत है। सभी ascii और विस्तारित-ascii आकर्षण एकल-बाइट के रूप में संग्रहीत किए जाएंगे।
दूसरे रास्ते पर जा रहे हैं, utf8 से लेकर लैटिन 1 तक चारसेट काम कर सकते हैं या नहीं भी। यदि कोई 2-बाइट चार्ट (विस्तारित-एससीआई 255 से आगे के वर्ण) हैं, तो वे एक लैटिन 1 डेटासटोर में स्टोर नहीं करेंगे।