2010-02-17 18 views
116

मैं टेक्स्ट एन्कोडिंग और वर्णमाला के बारे में उलझन में हूं। कई कारणों से, मुझे मेरे आने वाले काम में गैर-यूनिकोड, गैर-यूटीएफ 8 सामान सीखना है।एन्कोडिंग और वर्णमाला के बीच क्या अंतर है?

मुझे "आईएसओ -2022-जेपी" में ईमेल हेडर में "वर्णसेट" शब्द मिलता है, लेकिन टेक्स्ट एडिटर्स में ऐसा एन्कोडिंग नहीं है। (मैंने विभिन्न पाठ संपादकों के चारों ओर देखा।)

टेक्स्ट एन्कोडिंग और वर्णसेट के बीच क्या अंतर है? मैं की सराहना करता हूं यदि आप मुझे कुछ उपयोग केस उदाहरण दिखा सकते हैं।

+0

इस पोस्ट को देखें: http://stackoverflow.com/questions/13743250/meaning-of-xml-version-1-0-encoding-utf-8?lq=1 – rghome

उत्तर

107

असल:

  1. चारसेट आप
  2. एन्कोडिंग का उपयोग कर सकते पात्रों में से सेट किया जाता है जिस तरह से इन पात्रों स्मृति
+34

सच है, लेकिन वास्तविक उपयोग में "वर्णसेट" आमतौर पर * दोनों * चरित्र प्रदर्शन और एन्कोडिंग योजना को संदर्भित करता है। –

+0

@AlanMoore वास्तव में, "दशमलव विभाजक" के साथ किसी भी संख्या को संदर्भित करने के लिए लोग "दशमलव संख्या" कहते हैं। यह वास्तव में सही नहीं है, लेकिन हां आपको अवगत होना चाहिए कि कुछ लोग इसका उपयोग करते हैं। – bvdb

70

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

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

+11

ध्यान दें कि जावाडॉक गलत तरीके से "वर्णसेट" का उपयोग करता है "एन्कोडिंग" का उदाहरण, उदाहरण के लिए [इनपुटस्ट्रीम रीडर] (http://docs.oracle.com/javase/7/docs/api/java/io/InputStreamReader.html), हम पढ़ते हैं * "एक इनपुटस्ट्रीम रीडर बाइट से एक पुल है वर्ण धाराओं के लिए धाराएं: यह बाइट्स को पढ़ता है और उन्हें निर्दिष्ट वर्णसेट का उपयोग करके वर्णों में डीकोड करता है। इसका उपयोग करने वाले वर्ण को नाम से निर्दिष्ट किया जा सकता है या स्पष्ट रूप से दिया जा सकता है, या प्लेटफॉर्म का डिफ़ॉल्ट वर्ण स्वीकार किया जा सकता है। "*। हालांकि, उनका मतलब क्या है "एन्कोडिंग"। –

+0

आपकी व्याख्या के लिए धन्यवाद। ** यूनिकोड ** एक चरित्र सेट है, और ** यूटीएफ -8 ** ** यूनिकोड ** का एक एन्कोडिंग तरीका है, और ** यूटीएफ -16 ** ** यूनिकोड ** का एक और एन्कोडिंग तरीका है। – HongchaoZhang

8

एक वर्ण सेट, या चरित्र प्रदर्शनों की सूची में जमा हो जाती है है, बस है पात्रों का एक सेट (एक अनियंत्रित संग्रह)। एक कोडित चरित्र सेट प्रदर्शन में प्रत्येक वर्ण को एक पूर्णांक (एक "कोड बिंदु") असाइन करता है। एक एन्कोडिंग बाइट्स की धारा के रूप में अनजाने में कोड बिंदुओं का प्रतिनिधित्व करने का एक तरीका है।

5

एक वर्णमाला सिर्फ एक सेट है; इसमें या तो शामिल है, उदा। यूरो साइन, या नहीं यह नहीं करता है। बस इतना ही।

एक एन्कोडिंग एक चरित्र सेट से पूर्णांक के सेट पर एक जैविक मैपिंग है। यदि यह यूरो चिह्न का समर्थन करता है, तो उसे उस चरित्र के लिए एक विशिष्ट पूर्णांक असाइन करना होगा और कोई अन्य नहीं।

+0

क्या यह पक्षपातपूर्ण होना चाहिए? –

+2

खैर, एन्कोडिंग और डिकोडिंग निर्धारक होना चाहिए, इसलिए वास्तव में कोई संदिग्ध मैपिंग नहीं हो सकता है। मुझे लगता है कि आपके पास कोडमैन के रूप में पूर्णांक का एक गैर-संगत सेट हो सकता है, लेकिन जब आप पाठ संग्रहीत करते हैं तो वह अंतरिक्ष को बर्बाद कर देगा, और इंजीनियरों बर्बाद जगह से नफरत करते हैं। –

+1

विरासत चरित्र एन्कोडिंग अक्सर जैविक नहीं होते हैं। उदाहरण के लिए, आईबीएम 437 में, ß और β दोनों 0xE1 द्वारा दर्शाए जाते हैं। – dan04

40

अन्य उत्तर के अलावा मुझे लगता है कि इस लेख को पढ़ने के लिए एक अच्छा http://www.joelonsoftware.com/articles/Unicode.html

लेख का शीर्षक है "निरपेक्ष न्यूनतम हर सॉफ्टवेयर डेवलपर बिल्कुल, सकारात्मक यूनिकोड और चरित्र सेट (कोई Excuses बारे में पता होना चाहिए है!) "जोएल स्पॉस्की द्वारा लिखित । निबंध 10 साल से अधिक पुराना है लेकिन (दुर्भाग्य से) सामग्री अभी भी मान्य है ...

+2

लेख शुरू करने के लिए बहुत बहुत धन्यवाद। यह अच्छा है। –

+7

इस जवाब को * क्यों * मुझे जोएल के लेख को पढ़ना चाहिए, की संक्षिप्त व्याख्या देकर सुधार किया जा सकता है। –

+0

@ मत्तनजा आपके द्वारा प्रदान किया गया लिंक वास्तविक है। साझा करने के लिए धन्यवाद। वोट दिया – hagrawal

6

इसके लिए गुगल। http://en.wikipedia.org/wiki/Character_encoding

अंतर सूक्ष्म प्रतीत होता है। शब्द वर्णसेट वास्तव में यूनिकोड पर लागू नहीं होता है। यूनिकोड abstractions की एक श्रृंखला के माध्यम से चला जाता है। अमूर्त वर्ण -> कोड बिंदु -> बाइट्स को कोड पॉइंट्स का एन्कोडिंग।

चार्ससेट वास्तव में इसे छोड़ देते हैं और सीधे वर्णों से बाइट्स तक कूदते हैं।बाइट्स < की अनुक्रम -> पात्रों के अनुक्रम

संक्षेप में, एन्कोडिंग: कोड अंक -> बाइट्स चारसेट: वर्ण -> बाइट्स

23

एक वर्ण एन्कोडिंग के होते हैं:

  1. सेट समर्थित वर्णों के
  2. अक्षरों और पूर्णांक ("कोड बिंदु") के बीच मैपिंग
  3. कोड कोड की श्रृंखला के रूप में कोड कोड एन्कोड किए गए हैं इकाइयों "(जैसे, 16-बिट UTF-16 के लिए इकाइयों)
  4. कैसे कोड इकाइयों बाइट्स (जैसे, बड़े endian या थोड़ा-endian)

चरण # 1 अपने आप में एक है में इनकोड" चरित्र रेपरोटेयर "या अमूर्त" चरित्र सेट ", और # 1 + # 2 = एक" कोडित चरित्र सेट "।

लेकिन यूनिकोड लोकप्रिय होने से पहले और हर कोई (पूर्वी एशियाई को छोड़कर) एक-बाइट एन्कोडिंग का उपयोग कर रहा था, चरण # 3 और # 4 छोटे थे (कोड बिंदु = कोड इकाई = बाइट)। इस प्रकार, पुराने प्रोटोकॉल स्पष्ट रूप से "वर्ण एन्कोडिंग" और "कोडित वर्ण सेट" के बीच अंतर नहीं करते थे। पुराने प्रोटोकॉल charset का उपयोग करते हैं जब उनका वास्तव में एन्कोडिंग का मतलब होता है।

+0

समझना शुरू करना वाकई अच्छा है, इसलिए हम HTML मेटा टैग में वर्णसेट = 'utf-8' पढ़ सकते हैं? क्योंकि यह बहुत पहले परिभाषित किया गया था – Eildosa

10

अब से आने वाले लोगों के लिए और अधिक प्रकाश फेंकना, उम्मीद है कि यह सहायक होगा।


अक्षर समूह

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

वर्ण सेट के उदाहरण: ASCII (सभी अंग्रेजी अक्षर शामिल किया गया है), आईएसओ/आईईसी 646, यूनिकोड (दुनिया में सभी जीवित भाषाओं से पात्रों को शामिल किया गया)

कोड किया गया वर्ण सेट

एक कोडित वर्ण सेट एक सेट है जिसमें प्रत्येक चरित्र को एक अद्वितीय संख्या असाइन की जाती है। उस अद्वितीय संख्या को "कोड पॉइंट" कहा जाता है।
कोड किए गए चरित्र सेट को कभी-कभी कोड पेज कहा जाता है।

एन्कोडिंग

एन्कोडिंग तंत्र कुछ बाइट्स के साथ कोड अंक मैप करने के लिए इतना है कि एक चरित्र पढ़ सकते हैं और एक ही एन्कोडिंग स्कीम का उपयोग कर विभिन्न प्रणाली भर में समान रूप से लिखा जा सकता है।

एन्कोडिंग के उदाहरण: एएससीआईआईआई, यूटीएफ -8, यूटीएफ -16, यूटीएफ -32 जैसी यूनिकोड एन्कोडिंग योजनाएं।

ऊपर 3 अवधारणाओं का विस्तार

  • इस पर विचार करें - देवनागरी में चरित्र 'क' चरित्र सेट एक दशमलव कोड बिंदु 2325 के जो दो बाइट्स (09 15) द्वारा प्रतिनिधित्व किया जाएगा का उपयोग करते समय है UTF-16 एन्कोडिंग
  • में "ISO-8859-1" एन्कोडिंग स्कीम "ü" (यह लेकिन लैटिन वर्ण सेट में एक चरित्र कुछ भी नहीं है), जबकि में "एफसी" के हेक्सा-दशमलव मान के रूप में प्रतिनिधित्व कर रहा है "यूटीएफ -8 "यह" सी 3 बीसी "और यूटीएफ -16 में" एफई एफ "के रूप में दर्शाया गया है एफ 00 एफसी "।
  • विभिन्न एन्कोडिंग योजनाएं अलग-अलग वर्णों का प्रतिनिधित्व करने के लिए एक ही कोड बिंदु का उपयोग कर सकती हैं, उदाहरण के लिए "आईएसओ -885 9 -1" (जिसे लैटिन 1 भी कहा जाता है) में अक्षर 'é' के लिए दशमलव कोड बिंदु मान 233 है। हालांकि, आईएसओ में 885 9-5, एक ही कोड बिंदु सिरिलिक चरित्र 'щ' का प्रतिनिधित्व करता है।
  • दूसरी तरफ, यूनिकोड चरित्र सेट में एक कोड बिंदु वास्तव में दस्तावेज़ के लिए कौन सी एन्कोडिंग का उपयोग किया गया था, इस पर निर्भर करता है कि विभिन्न बाइट अनुक्रमों में मैप किया जा सकता है। देवनागरी चरित्र सी, कोड बिंदु 2325 (जो हेक्साडेसिमल नोटेशन में 915 है) के साथ, यूटीएफ -16 एन्कोडिंग (0 9 15), यूटीएफ -8 (ई0 ए 4 95), या चार के साथ तीन बाइट्स का उपयोग करते समय दो बाइट्स द्वारा प्रदर्शित किया जाएगा UTF-32 (00 00 09 15)
1

मेरी राय में साथ बाइट शब्द "शब्दसमुच्चय" एक वर्ण एन्कोडिंग (से एक मानचित्रण निर्दिष्ट करने के लिए HTTP, माइम, और इसी तरह के मानकों में इस्तेमाल किया पैरामीटर की पहचान करने तक सीमित होना चाहिए बाइट्स के अनुक्रम में पाठ वर्णों की एक श्रृंखला) नाम से। उदाहरण के लिए: charset=utf-8

मुझे पता है कि, MySQL, Java, और अन्य स्थान "वर्णमाला" शब्द का उपयोग वर्ण एन्कोडिंग के लिए कर सकते हैं।

संबंधित मुद्दे