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

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

यूनिकोड ऐसी दो धारणाएँ प्रदान करता है, विहित रूप तुल्यता और अनुकूलता। कोड बिंदु अनुक्रम जिन्हें कैनोनिक रूप से समकक्ष के रूप में परिभाषित किया गया है, मुद्रित या प्रदर्शित होने पर उनका स्वरूप और अर्थ समान माना जाता है। उदाहरण के लिए, कोड बिंदु 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