यूनिकोड तुल्यता

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

यूनिकोड ऐसी दो धारणाएँ विहित रूप तुल्यता और अनुकूलता प्रदान करता है। इस प्रकार कोड बिंदु अनुक्रम जिन्हें विहित रूप से समतुल्य के रूप में परिभाषित किया गया है, अतः मुद्रित या प्रदर्शित होने पर उनका स्वरूप और अर्थ समान माना जाता है। उदाहरण के लिए, कोड बिंदु U+006E (लैटिन वर्णमाला लोअरकेस n ) के पश्चात् U+0303 (संयोजन वर्ण टिल्ड) को यूनिकोड द्वारा विहित रूप से एकल कोड बिंदु U+00F1 (लोअरकेस स्पैनिश वर्णमाला का अक्षर ñ) के सामान्तर परिभाषित किया गया है। इसलिए, उन अनुक्रमों को उसी प्रकार से प्रदर्शित किया जाता है, जिससे कि वर्णमाला क्रम नाम या स्ट्रिंग खोज जैसे अनुप्रयोगों द्वारा उसी प्रकार से व्यवहार किया जाता है और दूसरे के लिए प्रतिस्थापित किया जा सकता है। इसी प्रकार, प्रत्येक हंगुल शब्दांश ब्लॉक जिसे एकल वर्ण के रूप में एन्कोड किया गया है, उसे समान रूप से अग्रणी संयोजन जामो, स्वर संयोजन जामो और यदि उपयुक्त होता है, तब अनुगामी संयोजन जामो के संयोजन के रूप में एन्कोड किया जा सकता है।

जिन अनुक्रमों को संगत के रूप में परिभाषित किया गया है, उनमें संभवतः भिन्न-भिन्न उपस्थिति मानी जाती है, किन्तु कुछ संदर्भों में उनका अर्थ समान होता है। इस प्रकार, उदाहरण के लिए, कोड बिंदु U+FB00 (टाइपोग्राफ़िक संयुक्ताक्षर "ﬀ") को अनुक्रम U+0066 U+0066 (दो लैटिन "f" अक्षर) के संगत होने के लिए परिभाषित किया गया है - किन्तु विहित रूप से समकक्ष नहीं होता है। इस प्रकार कुछ अनुप्रयोगों (जैसे छँटाई और सूचकांक) में संगत अनुक्रमों को उसी प्रकार से व्यवहार किया जा सकता है, किन्तु अन्य में ऐसा नहीं होता है और कुछ स्थितियों में एक-दूसरे के स्थान पर प्रतिस्थापित किया जा सकता है, किन्तु अन्य में ऐसा नहीं किया जा सकता है। वह अनुक्रम जो विहित रूप से समतुल्य होता हैं और संगत भी होता हैं, किन्तु यह आवश्यक नहीं है कि विपरीत सत्य होता है।

मानक पाठ सामान्यीकरण प्रक्रिया को भी परिभाषित करता है, जिसे यूनिकोड सामान्यीकरण कहा जाता है, जो वर्णों के समतुल्य अनुक्रमों को प्रतिस्थापित करता है, जिससे कि समतुल्य दो पाठ कोड बिंदुओं के समान अनुक्रम में कम हो जाते है, जिन्हें सामान्यीकरण रूप या मूल पाठ का सामान्य रूप कहा जाता है। इस प्रकार दो तुल्यता धारणाओं में से प्रत्येक के लिए, यूनिकोड दो सामान्य रूपों को परिभाषित करता है, अतः पूर्ण प्रकार से बना होता है (जहां जब भी संभव हो तब अनेक कोड बिंदुओं को एकल बिंदुओं द्वारा प्रतिस्थापित किया जाता है) और पूर्ण प्रकार से विघटित (जहां एकल बिंदुओं को अनेक में विभाजित किया जाता है) होता है।

अक्षर दोहराव
अनुकूलता या अन्य कारणों से, यूनिकोड कभी-कभी उन संस्थाओं को दो भिन्न-भिन्न कोड बिंदु निर्दिष्ट करता है जो अनिवार्य रूप से वर्ण के होते हैं। उदाहरण के लिए, अक्षर Å को U+00C5 (मानक नाम "लैटिन कैपिटल लेटर A ऊपर रिंग के साथ", स्वीडिश भाषा और अनेक अन्य भाषाओं में वर्णमाला का अक्षर) या U+212B (एंग्स्ट्रॉम साइन) के रूप में एन्कोड किया जा सकता है। इस प्रकार फिर भी एंगस्ट्रॉम के प्रतीक को स्वीडिश अक्षर के रूप में परिभाषित किया गया है और अधिकांश अन्य प्रतीक जो अक्षर हैं (जैसे वोल्ट के लिए "वी") में प्रत्येक उपयोग के लिए भिन्न कोड बिंदु नहीं होता है। सामान्यतः, वास्तव में समान वर्णों के कोड बिंदु (जिन्हें यूनिकोड फ़ॉन्ट में उसी प्रकार प्रस्तुत किया जा सकता है) को विहित रूप से समकक्ष के रूप में परिभाषित किया गया है।

संयोजन और पूर्वनिर्मित वर्ण
कुछ पुराने मानकों के साथ स्थिरता के लिए, यूनिकोड अनेक वर्णों के लिए एकल कोड बिंदु प्रदान करता है जिन्हें अन्य वर्णों के संशोधित रूपों के रूप में देखा जा सकता है (जैसे कि ñ के लिए U+00F1 या Å के लिए U+00C5) या दो या दो से अधिक वर्णों के संयोजन के रूप में (जैसे संयुक्ताक्षर "ﬀ" के लिए U+FB00 या डच वर्णमाला "IJ" (डिग्राफ) के लिए U+0132 के रूप में) के रूप में देखा जा सकता है।

अन्य मानकों के साथ स्थिरता के लिए और अधिक लचीलेपन के लिए, यूनिकोड अनेक तत्वों के लिए कोड भी प्रदान करता है जिनका उपयोग स्वयं नहीं किया जाता है, बल्कि पूर्ववर्ती आधार वर्ण के साथ संशोधित या संयोजित करने के लिए किया जाता है। इन संयोजन वर्णों के उदाहरण संयोजन टिल्ड और जापानी लिपि डायक्रिटिक डकुटेन ("◌゛", U+3099) होता हैं।

यूनिकोड के संदर्भ में, वर्ण रचना आधार अक्षर के कोड बिंदुओं को प्रतिस्थापित करने की प्रक्रिया होती है जिसके बाद अधिक वर्णों को एकल पूर्वनिर्मित वर्ण में संयोजित किया जाता है और चरित्र विघटन विपरीत प्रक्रिया होती है।

सामान्यतः, पूर्वनिर्मित वर्णों को उनके मूल अक्षर के अनुक्रम और बाद में विशेषक चिह्नों के संयोजन के रूप में परिभाषित किया जाता है, चाहे यह किसी भी क्रम में होंता है।

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

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

एन्कोडिंग त्रुटियाँ
यूटीएफ-8 और यूटीएफ-16 (और कुछ अन्य यूनिकोड एन्कोडिंग) कोड इकाइयों के सभी संभावित अनुक्रमों की अनुमति नहीं देते हैं। इस प्रकार भिन्न-भिन्न सॉफ़्टवेयर भिन्न-भिन्न नियमों का उपयोग करके अमान्य अनुक्रमों को यूनिकोड वर्णों में परिवर्तित कर देते है, जिनमें से कुछ अधिक हानिपूर्ण होते हैं (उदाहरण के लिए, सभी अमान्य अनुक्रमों को ही वर्ण में परिवर्तित किया जाता है)। इसे सामान्यीकरण का रूप माना जा सकता है और इससे दूसरों की भांति ही कठिनाइयाँ उत्पन्न हो सकती हैं।

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

एल्गोरिदम
यूनिकोड मानक सामान्यीकरण एल्गोरिदम प्रदान करता है जो समतुल्य सभी अनुक्रमों के लिए अद्वितीय (सामान्य) कोड बिंदु अनुक्रम उत्पन्न करता है; तुल्यता मानदंड या तब विहित (एनएफ) या अनुकूलता (एनएफके) हो सकता है। चूँकि कोई अनेैतिक रूप से तुल्यता वर्ग के प्रतिनिधि (गणित) तत्व को चुन सकता है, प्रत्येक तुल्यता मानदंड के लिए अनेक विहित रूप संभव हैं। यूनिकोड दो सामान्य रूप प्रदान करता है जो दोनों संगतता मानदंडों में से प्रत्येक के लिए शब्दार्थ रूप से सार्थक हैं: निर्मित रूप एनएफसी और एनएफकेसी, और विघटित रूप एनएफडी और एनएफकेडी। निर्मित और विघटित दोनों रूप कोड बिंदु अनुक्रम पर विहित क्रम क्रियान्वित करते हैं, जो सामान्य रूपों के अद्वितीय होने के लिए आवश्यक है।

यूनिकोड स्ट्रिंग्स की तुलना या खोज करने के लिए, सॉफ़्टवेयर रचित या विघटित रूपों का उपयोग कर सकता है; यह विकल्प तब तक मायने नहीं रखता जब तक यह खोज, तुलना आदि में सम्मिलित सभी स्ट्रिंग्स के लिए समान है। दूसरी ओर, तुल्यता मानदंड का चुनाव खोज परिणामों को प्रभावित कर सकता है। उदाहरण के लिए कुछ टाइपोग्राफ़िक संयुक्ताक्षर जैसे U+FB03 (ﬃ), रोमन अंक जैसे U+2168 (Ⅸ) और यहां तक ​​कि यूनिकोड उपलिपि और सुपरस्क्रिप्ट, जैसे U+2075 (⁵) के अपने स्वयं के यूनिकोड कोड बिंदु हैं। विहितल सामान्यीकरण (एनएफ) इनमें से किसी को भी प्रभावित नहीं करता है, किन्तु संगतता सामान्यीकरण (एनएफके) एफएफआई लिगचर को घटक अक्षरों में विघटित कर देगा, इसलिए सबस्ट्रिंग के रूप में यू+0066 (एफ) की खोज यू+एफबी03 के एनएफकेसी सामान्यीकरण में सफल होगी। किन्तु NFC में U+FB03 का सामान्यीकरण नहीं। इसी प्रकार जब पूर्वनिर्मित रोमन अंक Ⅸ (U+2168) में लैटिन अक्षर I (U+0049) की खोज की जाती है। इसी प्रकार संगतता मानचित्रण द्वारा सुपरस्क्रिप्ट ⁵ (U+2075) को 5 (U+0035) में बदल दिया जाता है।

चूँकि, रिच पाठ सॉफ़्टवेयर के लिए सुपरस्क्रिप्ट को बेसलाइन समकक्षों में बदलना उचित नहीं हो सकता है, क्योंकि इस प्रक्रिया में सुपरस्क्रिप्ट जानकारी खो जाती है। इस भेद की अनुमति देने के लिए, यूनिकोड वर्ण डेटाबेस में संगतता स्वरूपण टैग होते हैं जो संगतता परिवर्तन पर अतिरिक्त विवरण प्रदान करते हैं। टाइपोग्राफ़िक संयुक्ताक्षरों के स्थिति में, यह टैग सरल है, जबकि सुपरस्क्रिप्ट के लिए यह है. HTML जैसे रिच टेक्स्ट मानक संगतता टैग को ध्यान में रखते हैं। उदाहरण के लिए, HTML U+0035 को सुपरस्क्रिप्ट स्थिति में रखने के लिए अपने स्वयं के मार्कअप का उपयोग करता है।

सामान्य रूप
चार यूनिकोड सामान्यीकरण फॉर्म और उन्हें प्राप्त करने के लिए एल्गोरिदम (परिवर्तन) नीचे दी गई तालिका में सूचीबद्ध हैं।

ये सभी एल्गोरिदम निष्क्रिय परिवर्तन हैं, जिसका अर्थ है कि स्ट्रिंग जो पहले से ही इन सामान्यीकृत रूपों में से में है, उसी एल्गोरिदम द्वारा दोबारा संसाधित होने पर संशोधित नहीं की जाएगी।

स्ट्रिंग संयोजन के अनुसार सामान्य रूप क्लोजर (गणित) नहीं हैं। हंगुल स्वर से प्रारंभ होने वाले या हंगुल जामो (यूनिकोड ब्लॉक) के बाद आने वाले दोषपूर्ण यूनिकोड स्ट्रिंग के लिए, संयोजन रचना को तोड़ सकता है।

चूँकि, वह इंजेक्शन समारोह नहीं हैं (वे भिन्न-भिन्न मूल ग्लिफ़ और अनुक्रमों को ही सामान्यीकृत अनुक्रम में मानचित्र करते हैं) और इस प्रकार आक्षेप भी नहीं करते हैं (पुनर्स्थापित नहीं किया जा सकता)। उदाहरण के लिए, विशिष्ट यूनिकोड स्ट्रिंग्स U+212B (एंग्स्ट्रॉम चिह्न Å) और U+00C5 (स्वीडिश अक्षर Å) दोनों को NFD (या NFKD) द्वारा अनुक्रम U+0041 U+030A (लैटिन अक्षर A और संयोजन) में विस्तारित किया गया है ° से ऊपर रिंग) जिसे फिर NFC (या NFKC) द्वारा घटाकर U+00C5 (स्वीडिश अक्षर Å) कर दिया जाता है।

एकल वर्ण (हंगुल शब्दांश ब्लॉक के अतिरिक्त) जिसे सामान्यीकरण के अनुसार दूसरे द्वारा प्रतिस्थापित किया जाएगा, उसे यूनिकोड तालिकाओं में गैर-रिक्त संगतता फ़ील्ड के लिए पहचाना जा सकता है किन्तु संगतता टैग की कमी है।

विहित क्रम
विहित क्रम मुख्य रूप से वर्णों के संयोजन के अनुक्रम के क्रम से संबंधित है। इस खंड में उदाहरणों के लिए हम इन वर्णों को विशेषक मानते हैं, यदि सामान्यतः कुछ विशेषक वर्णों का संयोजन नहीं कर रहे हैं, और कुछ संयोजन वर्ण विशेषक नहीं हैं।

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

उदाहरण के लिए, वियतनामी वर्णमाला में प्रयुक्त वर्ण U+1EBF (ế) में तीव्र और परिधि दोनों उच्चारण हैं। इसका विहित अपघटन तीन-वर्ण अनुक्रम U+0065 (e) U+0302 (सर्कमफ्लेक्स उच्चारण) U+0301 (तीव्र उच्चारण) है। दोनों उच्चारणों के लिए संयोजन वर्ग 230 हैं, इस प्रकार U+1EBF U+0065 U+0301 U+0302 के सामान्तर नहीं है।

चूंकि सभी संयोजन अनुक्रमों में पहले से तैयार समतुल्य नहीं होता है (पिछले उदाहरण में अंतिम को केवल U+00E9 U+0302 तक कम किया जा सकता है), यहां तक ​​कि सामान्य रूप एनएफसी भी पात्रों के व्यवहार के संयोजन से प्रभावित होता है।

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

यह भी देखें

 * जटिल पाठ लेआउट
 * विशेषक
 * आईडीएन होमोग्राफ़ हमला
 * आईएसओ/आईईसी 14651
 * संयुक्ताक्षर (टाइपोग्राफी)
 * पूर्वनिर्मित चरित्र
 * uconv टूल एनएफसी और एनएफडी यूनिकोड सामान्यीकरण फॉर्म में परिवर्तित हो सकता है।
 * यूनिकोड
 * यूनिकोड संगतता वर्ण

संदर्भ

 * Unicode Standard Annex #15: Unicode Normalization Forms

बाहरी संबंध

 * Unicode.org FAQ - Normalization
 * Charlint - a character normalization tool written in Perl