मैंने लोगों से परस्पर विरोधी राय सुनी है - विकिपीडिया UTF-8 पृष्ठ के अनुसार।
वे एक ही बात कर रहे हैं, वे नहीं हैं? क्या कोई स्पष्ट कर सकता है?
मैंने लोगों से परस्पर विरोधी राय सुनी है - विकिपीडिया UTF-8 पृष्ठ के अनुसार।
वे एक ही बात कर रहे हैं, वे नहीं हैं? क्या कोई स्पष्ट कर सकता है?
जवाबों:
दूसरों द्वारा दिए गए उत्तरों पर विस्तार करने के लिए:
हमें बहुत सारी भाषाएं मिली हैं जिनमें बहुत से अक्षर हैं जिन्हें कंप्यूटर को आदर्श रूप में प्रदर्शित करना चाहिए। यूनिकोड प्रत्येक वर्ण को एक अद्वितीय संख्या या कोड बिंदु प्रदान करता है।
कंप्यूटर बाइट के रूप में इस तरह की संख्या से निपटते हैं ... यहां थोड़ा सा इतिहास को छोड़ दें और मेमोरी एड्रेसिंग के मुद्दों को अनदेखा करें, 8-बिट कंप्यूटर एक 8-बिट बाइट का इलाज करेंगे क्योंकि हार्डवेयर पर सबसे बड़ी संख्यात्मक इकाई का आसानी से प्रतिनिधित्व किया जाएगा, 16-बिट कंप्यूटर का विस्तार होगा दो बाइट्स तक, और इसके बाद।
एएससीआईआई जैसे पुराने चरित्र एनकोडिंग (पूर्व-) 8-बिट युग से हैं, और उस समय की कंप्यूटिंग में प्रमुख भाषा को क्रैम करने की कोशिश करते हैं, अर्थात अंग्रेजी में, 0 से 127 तक की संख्या (7 बिट्स) में। वर्णमाला में 26 अक्षरों के साथ, पूंजी और गैर-पूंजी रूप, संख्या और विराम चिह्न दोनों में, जिसने बहुत अच्छा काम किया। ASCII को अन्य, गैर-अंग्रेजी भाषाओं के लिए 8 बिट द्वारा विस्तारित किया गया, लेकिन इस विस्तार द्वारा उपलब्ध कराए गए अतिरिक्त 128 नंबर / कोड पॉइंट को प्रदर्शित की जा रही भाषा के आधार पर विभिन्न वर्णों में मैप किया जाएगा। आईएसओ-8859 मानक इस मानचित्रण के सबसे सामान्य रूप हैं; ISO-8859-1 और ISO-8859-15 (आईएसओ-लैटिन -1, लैटिन 1 के रूप में भी जाना जाता है, और हाँ 8859 आईएसओ मानक के दो अलग-अलग संस्करण भी हैं)।
लेकिन यह पर्याप्त नहीं है जब आप एक से अधिक भाषाओं के चरित्रों का प्रतिनिधित्व करना चाहते हैं, इसलिए सभी उपलब्ध वर्णों को एक ही बाइट में समेटना बस काम नहीं करेगा।
अनिवार्य रूप से दो अलग-अलग प्रकार के एन्कोडिंग हैं: एक अधिक बिट्स जोड़कर मूल्य सीमा का विस्तार करता है। इन एनकोडिंग के उदाहरण यूसीएस 2 (2 बाइट्स = 16 बिट्स) और यूसीएस 4 (4 बाइट्स = 32 बिट्स) होंगे। वे स्वाभाविक रूप से ASCII और ISO-8859 मानकों के समान समस्या से पीड़ित हैं, क्योंकि उनकी मूल्य सीमा अभी भी सीमित है, भले ही यह सीमा बहुत अधिक हो।
अन्य प्रकार के एन्कोडिंग प्रति वर्ण की बाइट संख्या का उपयोग करते हैं, और इसके लिए सबसे अधिक ज्ञात एनटीएफ यूटीएफ एनकोडिंग हैं। सभी UTF एन्कोडिंग लगभग एक ही तरीके से काम करते हैं: आप एक इकाई का आकार चुनते हैं, जो UTF-8 के लिए 8 बिट्स है, UTF-16 के लिए 16 बिट्स है, और UTF-32 के लिए 32 बिट्स है। मानक फिर इनमें से कुछ बिट्स को झंडे के रूप में परिभाषित करता है: यदि वे सेट होते हैं, तो इकाइयों के अनुक्रम में अगली इकाई को उसी चरित्र का हिस्सा माना जाता है। यदि वे सेट नहीं हैं, तो यह इकाई पूरी तरह से एक वर्ण का प्रतिनिधित्व करती है। इस प्रकार सबसे आम (अंग्रेजी) वर्ण केवल UTF-8 (UTF-16 में दो, UTF-32 में दो) पर एक बाइट पर कब्जा कर लेते हैं, लेकिन अन्य भाषा वर्ण छह बाइट्स या अधिक पर कब्जा कर सकते हैं।
मल्टी-बाइट एन्कोडिंग (उपरोक्त स्पष्टीकरण के बाद मुझे मल्टी-यूनिट कहना चाहिए) का लाभ यह है कि वे अपेक्षाकृत स्थान-कुशल हैं, लेकिन नकारात्मक पक्ष यह है कि संचालन, तुलना, आदि खोजने जैसे संचालन को सभी पात्रों को यूनिकोड कोड को डिकोड करना होगा। इस तरह के ऑपरेशन किए जाने से पहले अंक (कुछ शॉर्टकट हैं, हालांकि)।
यूसीएस मानकों और यूटीएफ मानकों दोनों यूनिकोड में परिभाषित कोड बिंदुओं को कूटबद्ध करते हैं। सिद्धांत रूप में, उन एन्कोडिंग का उपयोग किसी भी संख्या को एन्कोड करने के लिए किया जा सकता है (एन्कोडिंग का समर्थन करने वाली सीमा के भीतर) - लेकिन निश्चित रूप से इन एन्कोडिंग को यूनिकोड कोड बिंदुओं को एनकोड करने के लिए बनाया गया था। और यही आपके बीच का रिश्ता है।
विंडोज़ तथाकथित "यूनिकोड" तार को UTF-16 स्ट्रिंग्स के रूप में संभालता है, जबकि अधिकांश UNIXes इन दिनों UTF-8 के लिए डिफ़ॉल्ट हैं। HTTP जैसे संचार प्रोटोकॉल UTF-8 के साथ सबसे अच्छा काम करते हैं, क्योंकि UTF-8 में इकाई का आकार ASCII के समान है, और इस तरह के अधिकांश प्रोटोकॉल ASCII युग में डिज़ाइन किए गए थे। दूसरी ओर, UTF-16 सबसे अच्छा औसत देता है सभी जीवित भाषाओं का प्रतिनिधित्व करते समय स्थान / प्रसंस्करण प्रदर्शन ।
यूनिकोड मानक 32 बिट्स में प्रतिनिधित्व किए जाने की तुलना में कम कोड बिंदुओं को परिभाषित करता है। इस प्रकार सभी व्यावहारिक उद्देश्यों के लिए, यूटीएफ -32 और यूसीएस 4 एक ही एन्कोडिंग बन गए, क्योंकि आपको यूटीएफ -32 में मल्टी-यूनिट पात्रों से निपटने की संभावना नहीं है।
आशा है कि कुछ विवरणों में भर जाता है।
0x04000000
है 0x7FFFFFFF
, या बाइनरी में है 1111110v 10vvvvvv 10vvvvvv 10vvvvvv 10vvvvvv 10vvvvvv
- और यह वास्तव में 6 बाइट्स है। हालांकि, 6 बाइट्स अधिकतम है , और नहीं के रूप में लेख "छह बाइट्स या अधिक " भ्रामक दावा करता है ।
इस विषय को स्पष्ट करने के लिए एक उदाहरण का उपयोग करता हूं:
A chinese character: 汉
it's unicode value: U+6C49
convert 6C49 to binary: 01101100 01001001
अब तक कुछ भी जादुई नहीं है, यह बहुत सरल है। अब, मान लें कि हम इस चरित्र को हमारी हार्ड ड्राइव पर संग्रहीत करने का निर्णय लेते हैं। ऐसा करने के लिए, हमें चरित्र को द्विआधारी प्रारूप में संग्रहीत करने की आवश्यकता है। हम इसे '01101100 01001001' के रूप में स्टोर कर सकते हैं। किया हुआ!
लेकिन एक मिनट रुकिए, क्या '01101100 01001001' एक पात्र या दो वर्ण हैं? आपको पता था कि यह एक चरित्र है क्योंकि मैंने आपको बताया था, लेकिन जब कोई कंप्यूटर इसे पढ़ता है, तो इसका कोई पता नहीं है। इसलिए हमें कंप्यूटर को यह मानने के लिए किसी प्रकार की "एन्कोडिंग" की आवश्यकता है।
यहीं पर 'UTF-8' के नियम आते हैं: http://www.fileformat.info/info/unicode/utf8.htm
Binary format of bytes in sequence
1st Byte 2nd Byte 3rd Byte 4th Byte Number of Free Bits Maximum Expressible Unicode Value
0xxxxxxx 7 007F hex (127)
110xxxxx 10xxxxxx (5+6)=11 07FF hex (2047)
1110xxxx 10xxxxxx 10xxxxxx (4+6+6)=16 FFFF hex (65535)
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx (3+6+6+6)=21 10FFFF hex (1,114,111)
उपरोक्त तालिका के अनुसार, यदि हम 'UTF-8' प्रारूप का उपयोग करके इस चरित्र को संग्रहीत करना चाहते हैं, तो हमें अपने चरित्र को कुछ 'हेडर' के साथ उपसर्ग करने की आवश्यकता है। हमारा चीनी चरित्र 16 बिट लंबा है (बाइनरी मान को स्वयं गिनें), इसलिए हम पंक्ति 3 पर प्रारूप का उपयोग करेंगे क्योंकि यह पर्याप्त स्थान प्रदान करता है:
Header Place holder Fill in our Binary Result
1110 xxxx 0110 11100110
10 xxxxxx 110001 10110001
10 xxxxxx 001001 10001001
परिणाम को एक पंक्ति में लिखें:
11100110 10110001 10001001
यह चीनी चरित्र का UTF-8 (बाइनरी) मान है! (इसकी स्वयं पुष्टि करें: http://www.fileformat.info/info/unicode/char/6c49/index.htm )
A chinese character: 汉
it's unicode value: U+6C49
convert 6C49 to binary: 01101100 01001001
embed 6C49 as UTF-8: 11100110 10110001 10001001
PS यदि आप इस विषय को अजगर में सीखना चाहते हैं, तो यहां क्लिक करें
0
तो चरित्र को 1 बाइट (वर्तमान एक) द्वारा दर्शाया जाता है, यदि बाइट के साथ शुरू होता है, 110
तो चरित्र 2 बाइट (वर्तमान और अगले एक) द्वारा दर्शाया जाता है शेष बिट्स के बाद 10
)), यदि बाइट के साथ शुरू होता है 1110
तो चरित्र को 3 बाइट्स, वर्तमान और अगले 2 बाइट्स (शेष बिट्स के बाद 10
) द्वारा दर्शाया जाता है ।
"यूनिकोड" दुर्भाग्य से संदर्भ के आधार पर विभिन्न तरीकों से उपयोग किया जाता है। इसका सबसे सही उपयोग (IMO) एक कोडित वर्ण सेट के रूप में होता है - अर्थात वर्णों का एक समूह और वर्णों के बीच एक मानचित्रण और पूर्णांक कोड बिंदु उनका प्रतिनिधित्व करते हैं।
UTF-8 एक चरित्र एन्कोडिंग है - बाइट्स के अनुक्रमों से पात्रों के अनुक्रमों में परिवर्तित करने और इसके विपरीत। यह पूरे यूनिकोड चरित्र सेट को कवर करता है। ASCII एक बाइट प्रति वर्ण के रूप में एन्कोडेड है, और अन्य वर्ण अपने सटीक कोड बिंदु (वर्तमान में परिभाषित कोड बिंदुओं के लिए 4 बाइट्स, यानी U-0010FFFF तक, और वास्तव में 4 बाइट्स के साथ सामना कर सकते हैं) के आधार पर अधिक बाइट्स लेते हैं। यू-001FFFFF)।
जब "यूनिकोड" का उपयोग वर्ण एन्कोडिंग के नाम के रूप में किया जाता है (जैसे .NET एन्कोडिंग । यूनिकोड प्रॉपर्टी) तो इसका आमतौर पर मतलब होता है UTF-16 , जो दो बाइट्स के रूप में अधिकांश सामान्य वर्णों को कूटबद्ध करता है। कुछ प्लेटफ़ॉर्म (विशेष रूप से .NET और जावा) UTF-16 को उनके "मूल" वर्ण एन्कोडिंग के रूप में उपयोग करते हैं। यह बालों की समस्याओं की ओर जाता है यदि आपको उन पात्रों के बारे में चिंता करने की ज़रूरत है जो किसी भी UTF-16 मूल्य में एन्कोड नहीं किए जा सकते हैं (वे "सरोगेट जोड़े" के रूप में एन्कोडेड हैं) - लेकिन अधिकांश डेवलपर्स इस बारे में कभी भी चिंता नहीं करते हैं, आईएमई।
यूनिकोड पर कुछ संदर्भ:
वे एक ही बात नहीं कर रहे हैं - यूटीएफ -8 यूनिकोड एन्कोडिंग का एक विशेष तरीका है।
आपके आवेदन और आपके द्वारा उपयोग किए जाने वाले डेटा के आधार पर आपके द्वारा चुने जा सकने वाले विभिन्न एन्कोडिंग्स बहुत सारे हैं। सबसे आम यूटीएफ -8, यूटीएफ -16 और यूटीएफ -32 हैं जहां तक मैं जानता हूं।
यूनिकोड केवल कोड बिंदुओं को परिभाषित करता है, अर्थात् , एक संख्या जो एक चरित्र का प्रतिनिधित्व करती है। आप इन कोड बिंदुओं को मेमोरी में कैसे स्टोर करते हैं यह उस एन्कोडिंग पर निर्भर करता है जिसका आप उपयोग कर रहे हैं। UTF-8 कई अन्य लोगों के बीच, यूनिकोड वर्णों को कूटबद्ध करने का एक तरीका है।
यूनिकोड एक ऐसा मानक है जो आईएसओ / आईईसी 10646, यूनिवर्सल कैरेक्टर सेट (यूसीएस) के साथ परिभाषित करता है, जो व्यावहारिक रूप से सभी ज्ञात भाषाओं का प्रतिनिधित्व करने के लिए आवश्यक सभी मौजूदा पात्रों का सुपरसेट है।
यूनिकोड अपने प्रदर्शनों की सूची में प्रत्येक चरित्र को एक नाम और एक संख्या ( चरित्र कोड , या कोड-पॉइंट ) प्रदान करता है।
UTF-8 एन्कोडिंग , कंप्यूटर मेमोरी में इन अक्षरों को डिजिटल रूप से दर्शाने का एक तरीका है। UTF-8 ऑक्टेट के अनुक्रम में प्रत्येक कोड-पॉइंट को मैप करता है (8-बिट बाइट्स)
उदाहरण के लिए,
यूसीएस चरित्र = यूनिकोड हान चरित्र
UCS कोड-पॉइंट = U + 24B62
UTF-8 एन्कोडिंग = F0 A4 AD A2 (हेक्स) = 11110000 10100100 10101101 10100010 (बिन)
http://www.wikiwand.com/en/UTF-8#/Description
पहली पंक्ति पर एक नजर।
यूनिकोड केवल एक मानक है जो एक वर्ण सेट ( UCS ) और एनकोडिंग ( UTF ) को परिभाषित करता है ताकि इस वर्ण सेट को एनकोड किया जा सके। लेकिन सामान्य तौर पर, यूनिकोड को वर्ण सेट के लिए संदर्भित किया जाता है न कि मानक को।
पढ़ें 5 मिनट में यूनिकोड और कैरेक्टर सेट (कोई बहाना नहीं!) और यूनिकोड के बारे में पूरी तरह से कम से कम हर सॉफ्टवेयर डेवलपर पूरी तरह से ।
मौजूदा जवाब पहले से ही बहुत सारे विवरणों की व्याख्या करते हैं, लेकिन यहां सबसे प्रत्यक्ष स्पष्टीकरण और उदाहरण के साथ एक बहुत ही कम जवाब है।
यूनिकोड वह मानक है जो वर्णों को कोडपॉइंट पर मैप करता है।
प्रत्येक वर्ण में एक अद्वितीय कोडपॉइंट (पहचान संख्या) होती है, जो 9731 जैसी संख्या होती है।
UTF-8 एक है एन्कोडिंग कोड पॉइंट्स का।
सभी वर्णों को डिस्क पर (एक फ़ाइल में) संग्रहीत करने के लिए, UTF-8 वर्णों को 4 ऑक्टेट (8-बिट अनुक्रम) - बाइट्स में विभाजित करता है। UTF-8 कई एनकोडिंग (डेटा का प्रतिनिधित्व करने के तरीके) में से एक है। उदाहरण के लिए, यूनिकोड में, (दशमलव) कोड पॉइंट 9731 एक स्नोमैन का प्रतिनिधित्व करता है (☃
) का , जिसमें UTF-8 में 3 बाइट्स होते हैं:E2 98 83
यहां कुछ यादृच्छिक उदाहरणों के साथ एक क्रमबद्ध सूची दी गई है ।
दुनिया भर में बहुत सारे पात्र हैं, जैसे "$, &, h, a, t;?, 张, 1, =, + ..."।
फिर एक संगठन आता है जो इन पात्रों को समर्पित है,
उन्होंने "यूनिकोड" नामक एक मानक बनाया।
मानक इस प्रकार है:
पुनश्च: बेशक एक और संगठन है जिसे आईएसओ कहा जाता है जो एक और मानक बनाए रखता है - "आईएसओ 10646" course लगभग समान है।
जैसा कि ऊपर, U + 0024 सिर्फ एक स्थिति है, इसलिए हम "$" अक्षर के लिए कंप्यूटर में "U + 0024" नहीं बचा सकते हैं।
एक एन्कोडिंग विधि होनी चाहिए।
फिर यूटीएफ -8, यूटीएफ -16, यूटीएफ -32, यूसीएस -2 जैसे एन्कोडिंग के तरीके आते हैं।
UTF-8 के तहत, कोड बिंदु "U + 0024" को 00100100 में एन्कोड किया गया है।
00100100 वह मान है जिसे हम "$" के लिए कंप्यूटर में सहेजते हैं।
मैंने गम्बो के उत्तर में लिंक की जांच की है, और मैं उन चीजों के कुछ हिस्से को स्टैक ओवरफ्लो पर भी मौजूद करना चाहता था।
"... कुछ लोग गलत धारणा के तहत हैं कि यूनिकोड केवल एक 16-बिट कोड है जहां प्रत्येक वर्ण 16 बिट्स लेता है और इसलिए 65,536 संभव अक्षर हैं। यह वास्तव में सही नहीं है। यह यूनिकोड के बारे में सबसे आम मिथक है। , तो अगर आपको लगता है कि, बुरा मत मानना।
वास्तव में, यूनिकोड का पात्रों के बारे में सोचने का एक अलग तरीका है, और आपको चीजों को सोचने के यूनिकोड के तरीके को समझना होगा या कुछ भी समझ में नहीं आएगा।
अब तक, हमने मान लिया है कि कुछ चिट्ठियों में कुछ बिट्स होते हैं जिन्हें आप डिस्क या मेमोरी में स्टोर कर सकते हैं:
ए -> 0100 0001
यूनिकोड में, किसी अक्षर को एक कोड बिंदु कहा जाता है जो अभी भी एक सैद्धांतिक अवधारणा है। कैसे उस कोड पॉइंट को मेमोरी में दर्शाया जाता है या डिस्क पर एक पूरी कहानी है ... "
"... प्रत्येक वर्णमाला में प्रत्येक प्लेटोनिक पत्र को यूनिकोड संघ द्वारा एक जादुई संख्या दी जाती है जिसे इस तरह लिखा जाता है: U + 0639। इस जादू संख्या को एक कोड बिंदु कहा जाता है। U + का अर्थ है" यूनिकोड "और संख्याएँ हेक्साडेसिमल हैं। U + 0639 अरबी अक्षर ऐन है। अंग्रेजी अक्षर A U + 0041 होगा ...। "
"... ठीक है, तो कहते हैं कि हमारे पास एक स्ट्रिंग है:
हैलो
जो, यूनिकोड में, इन पाँच कोड बिंदुओं से मेल खाता है:
U + 0048 U + 0065 U + 006C U + 006C U + 006F।
कोड बिंदुओं का एक गुच्छा। संख्या, वास्तव में। हमने अभी तक इस बारे में कुछ नहीं कहा है कि इसे मेमोरी में कैसे स्टोर किया जाए या ईमेल संदेश में इसका प्रतिनिधित्व करें ... "
"... यही वह जगह है जहाँ एनकोडिंग आती है।
यूनिकोड एन्कोडिंग के लिए सबसे पहला विचार, जिसके कारण दो बाइट्स के बारे में मिथक था, हे, चलो बस उन संख्याओं को दो बाइट्स में संग्रहीत करें। तो हैलो बन जाता है
00 48 00 65 00 6C 00 6C 00 6F
सही? इतना शीघ्र नही! यह भी नहीं हो सकता है:
48 00 65 00 6C 00 6C 00 6F 00? ... "
यूटीएफ -8 यूनिकोड पाठ के लिए एक संभव एन्कोडिंग योजना है ।
यूनिकोड एक व्यापक-स्कोप्ड मानक है जो 130,000 से अधिक वर्णों को परिभाषित करता है और प्रत्येक संख्यात्मक कोड (एक कोड बिंदु) को आवंटित करता है। यह इस पाठ को कैसे सॉर्ट करता है, इसे सामान्य करता है, इसके मामले को बदलता है, आदि के लिए नियमों को भी परिभाषित करता है। यूनिकोड में एक वर्ण शून्य से 0x10FFFF समावेशी कोड बिंदु द्वारा दर्शाया गया है, हालांकि कुछ कोड बिंदु आरक्षित हैं और वर्णों के लिए उपयोग नहीं किए जा सकते हैं।
एक से अधिक तरीके हैं जो यूनिकोड कोड बिंदुओं की एक स्ट्रिंग को बाइनरी स्ट्रीम में एन्कोड किया जा सकता है। इन्हें "एनकोडिंग" कहा जाता है। सबसे सीधा एन्कोडिंग UTF-32 है , जो प्रत्येक कोड बिंदु को 32-बिट पूर्णांक के रूप में संग्रहीत करता है, जिसमें प्रत्येक 4 फीट चौड़ा होता है।
UTF-8 एक और एन्कोडिंग है, और UTF-32 और अन्य पर कई फायदे के कारण, वास्तविक मानक बन रहा है। यूटीएफ -8 एकल बाइट मूल्यों के अनुक्रम के रूप में एन्कोड करता है। प्रत्येक कोड बिंदु इन बाइट मानों की एक चर संख्या का उपयोग कर सकता है। ASCII रेंज में कोड बिंदु ASCII के साथ संगत होने के लिए, नंगे एन्कोडेड हैं। इस सीमा के बाहर कोड बिंदु बाइट्स की एक चर संख्या का उपयोग करते हैं, या तो 2, 3, या 4, वे किस सीमा में हैं, इस पर निर्भर करता है।
UTF-8 को इन गुणों को ध्यान में रखकर तैयार किया गया है:
ASCII वर्ण ठीक वैसे ही एन्कोड किए गए हैं जैसे वे ASCII में हैं, जैसे कि ASCII स्ट्रिंग एक मान्य UTF-8 स्ट्रिंग है।
बाइनरी सॉर्टिंग: एक भोले बाइनरी सॉर्ट का उपयोग करके यूटीएफ -8 स्ट्रिंग्स को सॉर्ट करना अभी भी सभी कोड बिंदुओं को संख्यात्मक क्रम में सॉर्ट किया जाएगा।
एकाधिक बाइट्स की आवश्यकता वाले वर्णों में ASCII रेंज में कोई बाइट मान नहीं होते हैं, यह सुनिश्चित करना कि उनमें से कुछ भी ASCII वर्णों के लिए गलत नहीं हो सकते। यह भी एक सुरक्षा सुविधा है।
UTF-8 को आसानी से मान्य किया जा सकता है, और एक सत्यापनकर्ता द्वारा अन्य वर्ण एन्कोडिंग से अलग किया जा सकता है। अन्य 8-बिट या मल्टी-बाइट एन्कोडिंग में पाठ बहुत कम ही यूटीएफ -8 के रूप में मान्य होगा।
रैंडम एक्सेस: UTF-8 स्ट्रिंग के किसी भी बिंदु पर यह बताना संभव है कि उस स्थिति में बाइट किसी वर्ण का पहला बाइट है या नहीं, और अगले या वर्तमान चरित्र की शुरुआत का पता लगाने के लिए, बिना फॉरवर्ड स्कैन करने की आवश्यकता है या कुछ बाइट्स से अधिक पीछे या धारा की शुरुआत में कुछ भी पढ़ें।
वे एक ही बात कर रहे हैं, वे नहीं हैं?
नहीं, वे नहीं हैं।
मुझे लगता है कि आपके द्वारा संदर्भित विकिपीडिया पृष्ठ का पहला वाक्य एक अच्छा, संक्षिप्त सारांश देता है:
UTF-8 एक चर चौड़ाई वर्ण एन्कोडिंग है जो एक से चार 8-बिट बाइट्स का उपयोग करके यूनिकोड में सभी 1,112,064 वैध कोड बिंदुओं को कूटबद्ध करने में सक्षम है।
समझाने के लिए:
यूनिकोड एक मानक है, जो वर्णों से संख्याओं तक, तथाकथित कोड बिंदुओं (जैसे नीचे दिए गए उदाहरण में) को परिभाषित करता है । पूर्ण मानचित्रण के लिए, आप यहाँ देख सकते हैं ।
! -> U+0021 (21),
" -> U+0022 (22),
\# -> U+0023 (23)
UTF-8 एक कंप्यूटर को समझ सकता है, उर्फ बिट्स में इन कोड बिंदुओं को एनकोड करने के तरीकों में से एक है । दूसरे शब्दों में, यह उन कोड बिंदुओं में से प्रत्येक को बिट्स के अनुक्रम में बदलने या बिट्स के अनुक्रम को समतुल्य कोड बिंदुओं में परिवर्तित करने का एक तरीका है। ध्यान दें कि यूनिकोड के लिए बहुत सारे वैकल्पिक एनकोडिंग हैं।
जोएल एक बहुत अच्छी व्याख्या देता है और यहां के इतिहास का अवलोकन करता है ।
अगर मैं संक्षेप में बताऊं कि मैं इस धागे से क्या इकट्ठा किया था:
यूनिकोड ' वर्णों को क्रमिक संख्याओं (दशमलव रूप में) में अनुवाद करता है ।
à = 224
UTF-8 एक एन्कोडिंग है जो बाइनरी अभ्यावेदन के लिए इन नंबरों का 'अनुवाद' करता है ।
224 = 11000011 10100000
ध्यान दें कि हम 224 के बाइनरी प्रतिनिधित्व के बारे में बात कर रहे हैं , न कि इसका बाइनरी फॉर्म, जो 0b11100000 है।
यह लेख सभी विवरणों की व्याख्या करता है http://kunststube.net/encoding/
खरीदने वाला
यदि आप 4 बाइट बफर, あ
UTF8 एन्कोडिंग के साथ प्रतीक लिखते हैं , तो आपका बाइनरी इस तरह दिखेगा:
00000000 11100011 10000001 10000010
यदि आप 4 बाइट बफर, あ
UTF16 एन्कोडिंग के साथ प्रतीक लिखते हैं , तो आपका बाइनरी इस तरह दिखेगा:
00000000 00000000 00110000 01000010
जैसा कि आप देख सकते हैं, आप अपनी सामग्री में किस भाषा का उपयोग करेंगे, इस पर निर्भर करता है।
उदा। इस विशेष प्रतीक के लिए: あ
UTF16 एन्कोडिंग अधिक कुशल है क्योंकि हमारे पास अगले प्रतीक के लिए उपयोग करने के लिए 2 अतिरिक्त बाइट्स हैं। लेकिन इसका मतलब यह नहीं है कि आप जापान वर्णमाला के लिए UTF16 का उपयोग करें।
खरीददार से
अब यदि आप उपरोक्त बाइट्स को पढ़ना चाहते हैं, तो आपको यह जानना होगा कि इसे किस एन्कोडिंग में लिखा गया था और इसे सही ढंग से वापस डिकोड किया गया था।
जैसे आप इस डिकोड हैं:
00000000 11100011 10000001 10000010
UTF16 एन्कोडिंग में, आप के साथ खत्म हो जाएगा 臣
नहींあ
नोट: एनकोडिंग और यूनिकोड दो अलग-अलग चीजें हैं। यूनिकोड एक अद्वितीय कोड बिंदु पर मैप किए गए प्रत्येक प्रतीक के साथ बड़ा (तालिका) है । उदाहरण के あ
प्रतीक (अक्षर) में एक (कोड बिंदु) है : 30 42 (हेक्स)। दूसरी ओर एन्कोडिंग, एक एल्गोरिथ्म है जो प्रतीकों को अधिक उपयुक्त तरीके से परिवर्तित करता है, जब हार्डवेयर को संग्रहीत करता है।
30 42 (hex) - > UTF8 encoding - > E3 81 82 (hex), which is above result in binary.
30 42 (hex) - > UTF16 encoding - > 30 42 (hex), which is above result in binary.