2009-11-16 13 views
5

मैं Unicode में कुछ डुप्लिकेट वर्ण देख सकता हूं। उदाहरण के लिए, चरित्र 'सी' को कोड पॉइंट्स यू +0043 और यू + 0421 द्वारा प्रदर्शित किया जा सकता है। ऐसा क्यों है?यूनिकोड में डुप्लिकेट वर्ण क्यों हैं?

उत्तर

20

जैसा कि अन्य ने ध्यान दिया है, यहां आपकी मुख्य झुकाव लैटिन और सिरिलिक स्क्रिप्ट और कुछ ग्लिफ को भ्रमित कर रही है (अर्थात् सी (U+0043 LATIN CAPITAL LETTER C) और С (U+0421 CYRILLIC CAPITAL LETTER ES))। ऐसे कई चरित्र जोड़े हैं जो समान दिखते हैं लेकिन अलग-अलग वर्ण हैं। उदाहरण के लिए, आपको लैटिन, ग्रीक और सिरिलिक के बीच बहुत कुछ मिलेगा। अधिकांश समय वे केवल अपरकेस या लोअरकेस में काम करते हैं, हालांकि।

हालांकि, वहां वास्तव में डुप्लिकेट हैं, कभी-कभी जानबूझकर ऐसा करते हैं। उदाहरण के लिए, पूरे (एएससीआईआई) लैटिन वर्णमाला को यू + एफएफ 00 और यू + एफएफईएफ के बीच 'हाफविड्थ और फुलविड्थ फॉर्म' यूनिकोड ब्लॉक में दो बार फिर से दर्शाया गया है। ऐसे अन्य उदाहरण हैं, हालांकि, सबसे विशेष रूप से प्लेन 1 पर गणितीय वर्णमाला अनुभाग में जहां तीन या चार लैटिन वर्णमाला मौजूद हैं।

अन्य चीजें हैं जो वास्तव में एक ही चरित्र हैं लेकिन विभिन्न कोड बिंदुओं पर हैं। उदाहरण के लिए, μ (U+00B5 MICRO SIGN) और μ (U+03BC GREEK SMALL LETTER MU) है। वे आमतौर पर decomposition से जुड़े होते हैं।

यूनिकोड code point नामक एक अमूर्त अवधारणा से संबंधित है। कोड बिंदु अनजाने में एक चरित्र और इसकी लिपि या समूह को परिभाषित करता है। यह कहता है कि कुछ भी किसी फ़ॉन्ट में संबंधित ग्लाइफ कैसे प्रदान किया जाएगा (जो लैटिन के लिए पहले से ही भिन्न हो सकता है)। यह यह भी परिभाषित नहीं करता है कि फ़ाइल या मेमोरी (यानी बाइट अनुक्रम के रूप में) में इस कोड बिंदु का प्रतिनिधित्व कैसे किया जाता है। यह Unicode Transformation Formats में से एक के लिए एक नौकरी है।

अलग-अलग कोड बिंदुओं के साथ दो भाषाओं में समान दिखने वाले चरित्र का कारण क्या है?

यूनिकोड का मुख्य बिंदु यहां हैं: हर पहले से मौजूद वर्ण एन्कोडिंग को

  • संगतता। यह सुनिश्चित करना है कि प्रत्येक चरित्र के लिए एक-एक-एक मैपिंग है जो एक एन्कोडिंग में यूनिकोड कोड बिंदु के बराबर बराबर होती है।
  • आजकल उपयोग की जाने वाली प्रत्येक स्क्रिप्ट का विश्वासपूर्वक और सटीक रूप से प्रतिनिधित्व करते हैं, बाद में उपयोग में अन्य स्क्रिप्ट में विस्तारित किया गया था और कंप्यूटर सिस्टम में संग्रहीत करने की आवश्यकता है।

तो वहाँ एक बहुत मजबूत और लिपियों अलग रखने के लिए प्रोत्साहन नहीं उनकी उपस्थिति के अनुसार वर्ण मैप करने के लिए प्रयास करें। वैसे भी उपस्थिति मुश्किल हो सकती है। उदाहरण के लिए सिरिलिक अक्षर 'टी' ले लो, जो यहां एक छोटे ऊपरी मामले लैटिन 'टी' जैसा प्रतीत होता है। हालांकि, इसे सामान्य तरीके से प्रस्तुत किया जाता है जब इसे इटैलिकिस किया जाता है: 'т' लोअर-केस लैटिन 'एम' जैसा दिखता है। आप वास्तव में उपस्थिति से ऐसे पात्रों को मानचित्र बनाना नहीं चाहते हैं।

9

यदि आप U+0400 to U+04FF code chart पर देखते हैं तो आप पाएंगे कि U + 0421 एक सिरिलिक कैपिटल लीटर "es" है। यह को लैटिन सी की तरह देख सकता है, लेकिन यह एक अलग तार्किक चरित्र है।

+0

अलग-अलग कोड बिंदुओं के साथ दो भाषाओं में एक समान दिखने वाला चरित्र होने का कारण क्या है (मैं इस बारे में जानना चाहता हूं क्योंकि मुझे अलग-अलग एन्कोडिंग के बीच रूपांतरण उपयोगिता विकसित करना है, जिसमें से एक अपनी खुद की कंपनियां स्वामित्व वाली एन्कोडिंग प्रारूप है) – Poorna

+0

@ Sirish: वे विभिन्न संस्कृतियों से अलग पात्र हैं, और वे विभिन्न नियमों का पालन कर सकते हैं। उदाहरण के लिए, सिरिलिक "एन" पूंजी रूप में लैटिन "एच" जैसा दिखता है - लेकिन छोटे रूप में नहीं। उनका अलग-अलग व्यवहार किया जाना चाहिए - उन्हें प्रदर्शित करने के लिए इस्तेमाल किए गए ग्लिफ आकस्मिक हैं, वास्तव में। –

+1

@ सिरिश: वे दो अलग-अलग * स्क्रिप्ट्स * में समान दिखने वाले चरित्र हैं, यही यूनिकोड से संबंधित है। भाषा नहीं, स्क्रिप्ट्स। वास्तव में, सिरिलिक ईएस की सी-आकार की उपस्थिति को बीजान्टिन काल में पूंजी ग्रीक सिग्मा के एक विशिष्ट रूप में वापस खोजना है। लैटिन सी के साथ समानता केवल आकस्मिक है। –

8

अक्षरों को देखो, लेकिन बहुत अलग हैं। यू +0043 लैटिन अक्षर सी है, लेकिन यू + 0421 साइरिलिक एस है (जो लैटिन वर्णमाला में एस के अनुरूप है)।

उनके असंबंधित अर्थों के कारण, अलग-अलग संदर्भ बिंदुओं को आवरण और सॉर्टिंग को रोकने के लिए अलग-अलग कोड बिंदुओं की आवश्यकता होती है - आपको अचानक अनुमान लगाना होगा कि आप किस भाषा से निपट रहे हैं। जबकि U+0421 सिरिलिक है, जिसका अर्थ है कि वे वास्तव में एक ही पत्र नहीं हैं, एक ही लग सकता है, भले ही

2

U+0043, C के लैटिन प्रतिनिधित्व है।

7

इसी कारण से 0 और O समान दिखते हैं (अधिकांश मोनो-स्पेस फोंट में), लेकिन अलग-अलग एन्कोड किए गए हैं - उनका मतलब अलग-अलग चीजें हैं।

+2

+1 अच्छा सादृश्य :-) –

+1

मेरे पास '1' और' 0' के बिना टाइपराइटर था :) – Kornel

+0

शून्य की उपस्थिति के बारे में एक ऐतिहासिक नोट (या शायद कंप्यूटर दुनिया के बाहर इतना ऐतिहासिक नहीं) के लिए, देखें * [slashed शून्य ] (http://en.wikipedia.org/wiki/Slashed_zero) *। –

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