सभी के बारे में सामान्यीकृत UTF-8 क्या है?


129

आईसीयू परियोजना (जो भी अब एक है पीएचपी पुस्तकालय ) यह आसान भी मिलती हैं मानों की तुलना करने के लिए मदद के सामान्य UTF-8 तार करने के लिए आवश्यक वर्गों में शामिल है।

हालाँकि, मैं यह पता लगाने की कोशिश कर रहा हूँ कि अनुप्रयोगों के लिए इसका क्या अर्थ है। उदाहरण के लिए, "संगतता समानता" या विज़-वर्सा के बजाय मैं किन मामलों में "कैनोनिकल इक्वलेंस" चाहता हूं?


230
कौन ̸͢k̵͟n̴͘ǫw̸̛s͘ w͘͢ḩ̵a҉̡͢t भयावहता झूठ डार्क दिल के यूनिकोड ͞
ObscureRobot

@ObscureRobot मैं वास्तव में जानना चाहता हूं कि क्या उन अतिरिक्त प्रतीकों में राज्य हो सकते हैं या नहीं
eonil

1
@ ईऑनिल - मुझे यकीन नहीं है कि यूनिकोड के संदर्भ में राज्य का क्या मतलब है।
ऑबसेक्योरोबॉट

@ObscureRobot उदाहरण के लिए, कुछ कोड बिंदु इस तरह हैं: (begin curved line) (char1) (char2) … (charN) (end curved line)इसके बजाय (curved line marker prefix) (char1) (curved line marker prefix) (char2) (curved line marker prefix) (char2):। दूसरे शब्दों में, न्यूनतम इकाई जो प्रदान की जा सकती है?
22

2
यह अपने आप में एक अच्छा सवाल लगता है।
ऑब्स्क्योररॉबोट

जवाबों:


181

यूनिकोड नॉर्मलाइज़ेशन के बारे में जानने के लिए आप जो कुछ भी कभी नहीं करना चाहते थे

विहित सामान्यीकरण

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

कब इस्तेमाल करें

क्योंकि परिणाम एक समान दिखाई देते हैं, इसलिए इसे संग्रहीत या प्रदर्शित करने से पहले एक स्ट्रिंग में विहित सामान्यीकरण लागू करना हमेशा सुरक्षित होता है, जब तक कि आप इनपुट के समान बिट के लिए बिट नहीं होने के परिणामस्वरूप परिणाम को सहन कर सकते हैं।

Canonical normalization 2 रूपों में आता है: NFD और NFC। दोनों इस अर्थ में समतुल्य हैं कि कोई इन दो रूपों के बीच बिना नुकसान के रूप में परिवर्तित हो सकता है। एनएफसी के तहत दो तारों की तुलना करना हमेशा एनएफडी के तहत उनकी तुलना करने के समान परिणाम देगा।

NFD

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

यदि आप केवल दो तारों की तुलना करना चाहते हैं जो पहले से ही सामान्यीकृत नहीं हैं, तो यह पसंदीदा सामान्यीकरण फ़ॉर्म है जब तक कि आपको नहीं पता कि आपको संगतता सामान्यीकरण की आवश्यकता है।

एनएफसी

एनएफडी एल्गोरिथ्म चलाने के बाद जब संभव हो तो एनएफसी पुन: संयोजक कोड बिंदु। इसमें थोड़ा अधिक समय लगता है, लेकिन इसके परिणाम कम होते हैं।

संगतता सामान्यीकरण

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

संगतता सामान्यीकरण इन्हें "वास्तविक" वर्णों के संगत अनुक्रम में परिवर्तित करता है, और विहित सामान्यीकरण भी करता है। संगतता सामान्यीकरण के परिणाम मूल के समान नहीं दिखाई दे सकते हैं।

जिन वर्णों में फ़ॉर्मेटिंग जानकारी शामिल होती है उन्हें उन लोगों के साथ बदल दिया जाता है जो नहीं करते हैं। उदाहरण के लिए चरित्र परिवर्तित हो जाता है 9। दूसरों में प्रारूपण अंतर शामिल नहीं है। उदाहरण के लिए रोमन अंक चरित्र को नियमित अक्षरों में परिवर्तित किया जाता हैIX

जाहिर है, एक बार यह परिवर्तन हो जाने के बाद, मूल चरित्र सेट में दोषरहित रूप से परिवर्तित होना संभव नहीं है।

कब इस्तेमाल करें

यूनिकोड कंसोर्टियम एक की तरह संगतता सामान्यीकरण की सोच का सुझाव देता है ToUpperCase रूपांतरण की । यह कुछ ऐसा है जो कुछ परिस्थितियों में उपयोगी हो सकता है, लेकिन आपको इसे केवल विली-नीली लागू नहीं करना चाहिए।

एक उत्कृष्ट उपयोग का मामला एक खोज इंजन होगा क्योंकि आप शायद 9मैच के लिए एक खोज चाहते हैं

एक चीज जो आपको शायद नहीं करनी चाहिए वह है उपयोगकर्ता के लिए अनुकूलता सामान्यीकरण लागू करने का परिणाम।

NFKC / NFKD

संगतता सामान्यीकरण फ़ॉर्म NFKD और NFKC दो रूपों में आता है। उनका वही संबंध है जो एनएफडी और सी के बीच है।

NFKC में कोई स्ट्रिंग स्वाभाविक रूप से NFC में भी है, और NFKD और NFD के लिए भी यही है। इस प्रकार NFKD(x)=NFD(NFKC(x)), और NFKC(x)=NFC(NFKD(x)), आदि।

निष्कर्ष

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


42
एक संक्षिप्त संदर्भ यह याद रखने के लिए कि संक्षिप्त रूप क्या है: NF = सामान्यीकृत रूप D = विघटित (विघटित) , C = रचना (संपीड़ित) K = अनुकूलता (क्योंकि "C" लिया गया था)।
बजे माइक स्पॉस ऑक्ट

12
आप हमेशा एनएफडी को इनपुट पर सभी स्ट्रिंग्स को पहली चीज़ के रूप में और एनएफसी सभी स्ट्रिंग्स आउटपुट को अंतिम चीज़ के रूप में चाहते हैं। यह सर्वविदित है।
1

3
@tchrist: यह आम तौर पर अच्छी सलाह है, केवल उन दुर्लभ मामलों को छोड़कर, जब आप कोई बदलाव नहीं होने पर इनपुट के समान बाइट के लिए बाइट की इच्छा रखते हैं। कुछ अन्य मामले हैं जहां आप डिस्क पर एनएफसी मेमोरी या एनएफडी चाहते हैं, लेकिन वे नियम के बजाय छूट हैं।
केविन कैथार्ट

@ केविन: हाँ, एनएफडी और एनएफसी बाहर एकल नष्ट कर देगा। मुझे यकीन नहीं है कि कोई भी उन के बारे में परवाह करता है, लेकिन संभवतः।
22

2
आप ऐसा सोच सकते हैं, लेकिन एनेक्स से: "यूनिकोड स्ट्रिंग को दिए गए यूनिकोड नॉर्मलाइज़ेशन फॉर्म में बदलने के लिए, पहला कदम स्ट्रिंग को पूरी तरह से विघटित करना है"। इस प्रकार यहां तक ​​कि NFC चलाने वाले, Q-Caron पहले Q + Caron बन जाएंगे, और पुन: प्रस्ताव नहीं कर सकते, क्योंकि स्थिरता नियम नई रचना मानचित्रण को जोड़ने से रोकते हैं। एनएफसी को प्रभावी रूप से परिभाषित किया गया है NFC(x)=Recompose(NFD(x))
केविन कैथार्ट

40

कुछ वर्ण, उदाहरण के लिए एक अक्षर के साथ एक अक्षर (कहते हैं é) , दो तरीकों से दर्शाया जा सकता है - एक एकल कोड बिंदु U+00E9या सादे अक्षर के बाद एक संयोजन चिह्नU+0065 U+0301 । साधारण रूप से सामान्यीकरण इनमें से एक को हमेशा इसका प्रतिनिधित्व करने के लिए चुनेगा (एनएफसी के लिए एकल कोड बिंदु, एनएफडी के लिए संयोजन रूप)।

उन वर्णों के लिए जिन्हें आधार वर्णों और संयोजन चिह्नों के कई अनुक्रमों द्वारा दर्शाया जा सकता है (जैसे, "s, नीचे डॉट, ऊपर डॉट" बनाम ऊपर डॉट डाल रहा है, फिर नीचे डॉट या किसी ऐसे आधार वर्ण का उपयोग कर सकते हैं जिसमें पहले से ही डॉट्स हैं), NFD होगा इनमें से एक भी चुनें (नीचे पहले जाता है, जैसा कि ऐसा होता है)

संगतता डिकम्पोज़िशन में कई वर्ण शामिल होते हैं जो "वास्तव में नहीं होने चाहिए" वर्ण होते हैं, लेकिन ऐसा इसलिए है क्योंकि वे विरासत एन्कोडिंग में उपयोग किए गए थे। साधारण सामान्यीकरण इन्हें (राउंड-ट्रिप अखंडता को संरक्षित करने के लिए) को एकीकृत नहीं करेगा - यह संयोजन रूपों के लिए कोई समस्या नहीं है क्योंकि कोई विरासत एन्कोडिंग [एक मुट्ठी भर शटल एन्कोडिंग को छोड़कर] दोनों का उपयोग नहीं किया गया), लेकिन संगतता सामान्यीकरण होगी। "किग्रा" किलोग्राम के संकेत की तरह सोचें जो कुछ पूर्व एशियाई एन्कोडिंग (या अर्धवृत्त / पूर्णता कताकाना और वर्णमाला), या MacRoman में "फाई" संयुक्ताक्षर में दिखाई देता है।

अधिक जानकारी के लिए http://unicode.org/reports/tr15/ देखें ।


1
यह वास्तव में सही उत्तर है। यदि आप पाठ पर सिर्फ विहित सामान्यीकरण का उपयोग करते हैं जो कुछ विरासत चरित्र सेट में उत्पन्न हुआ है, तो परिणाम को नुकसान के बिना सेट किए गए चरित्र में वापस परिवर्तित किया जा सकता है। यदि आप संगतता विघटन का उपयोग करते हैं, तो आप बिना किसी संगतता वर्ण के समाप्त हो जाते हैं, लेकिन बिना नुकसान के मूल वर्ण में वापस परिवर्तित करना संभव नहीं है।
केविन कैथार्ट

13

सामान्य रूप (यूनिकोड, डेटाबेस नहीं) मुख्य रूप से (विशेष रूप से?) उन वर्णों के साथ होते हैं जिनके पास विशिष्ट चिह्न हैं। यूनिकोड कुछ चरित्र प्रदान करता है, जो "डीआर्किटिकल मार्क्स में बनाया गया है, जैसे कि U + 00C0," लैटिन कैपिटल ए विद ग्रेव "। एक ही वर्ण एक "लैटिन कैपिटल ए" (यू + 0041) से "कंबाइनिंग ग्रेव एक्सेंट" (यू + 0300) से बनाया जा सकता है। इसका मतलब है कि भले ही दो अनुक्रम एक ही परिणामी चरित्र, एक बाइट-बाय-बाइट का उत्पादन करते हैं। तुलना उन्हें पूरी तरह से अलग होने के रूप में दिखाएगी।

सामान्यीकरण उसी से निपटने का एक प्रयास है। सामान्यीकरण के आश्वासन (या कम से कम कोशिश करता है) कि सभी वर्ण एक ही तरह से एन्कोड किए गए हैं - या तो सभी अलग-अलग संयोजन के साथ एक विशेष संयोजन का उपयोग करते हैं जहां जरूरत है, या जहां भी संभव हो, एक ही कोड बिंदु का उपयोग करके सभी। तुलना के दृष्टिकोण से, यह वास्तव में पूरी तरह से बहुत मायने नहीं रखता है जिसे आप चुनते हैं - बहुत अधिक किसी भी सामान्यीकृत स्ट्रिंग की तुलना एक अन्य सामान्यीकृत स्ट्रिंग के साथ ठीक से होगी।

इस स्थिति में, "अनुकूलता" का मतलब कोड के साथ संगतता है जो मानता है कि एक कोड बिंदु एक वर्ण के बराबर है। यदि आपके पास इस तरह का कोड है, तो आप संभवतः संगतता सामान्य रूप का उपयोग करना चाहते हैं। हालाँकि मैंने कभी नहीं देखा कि यह सीधे तौर पर कहा गया है, सामान्य रूपों के नाम का अर्थ है कि यूनिकोड कंसोर्टियम इसे अलग-अलग संयोजन के साथ प्रयोग करने योग्य मानता है। इसके लिए वास्तविक पात्रों को एक स्ट्रिंग में गिनने के लिए और अधिक बुद्धिमत्ता की आवश्यकता होती है (साथ ही साथ एक स्ट्रिंग को समझदारी से तोड़ने जैसी चीजें), लेकिन अधिक बहुमुखी है।

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


तो यह वह हिस्सा है जहां ग्रेपाइम फंक्शंस आते हैं। न केवल चरित्र ASCII से अधिक बाइट्स है - बल्कि कई अनुक्रम एक एकल वर्ण सही हो सकते हैं? ( एमबी स्ट्रिंग फ़ंक्शंस के विपरीत ।)
एक्सोनक्रॉस

4
नहीं, 'एक कोड बिंदु एक वर्ण है' मोटे तौर पर एनएफसी से मेल खाता है (संयोजन अंकों के साथ एक एनएफडी है, और उनमें से कोई भी "संगतता" नहीं है) - संगतता सामान्यीकरण NFKC / NFKD एक अलग मुद्दा है; संगतता (या उसके अभाव) के लिए विरासत एन्कोडिंग कि उदाहरण के लिए ग्रीक म्यू और 'माइक्रो' के लिए अलग-अलग वर्ण थे (जो कि एक मजेदार है क्योंकि इसे लाने के लिए "संगतता" संस्करण वह है जो लैटिन 1 ब्लॉक में है)
Random832

@ Random832: उफ़, काफी सही। मुझे स्मृति से जाने से बेहतर पता होना चाहिए जब मैंने पिछले एक या दो साल से इसके साथ काम नहीं किया है।
जेरी कॉफिन

@ Random832 यह सच नहीं है। आपका "मोटे तौर पर" वहाँ से बाहर है। दो अंगूरों पर विचार करें, hem और hem। उनमें से प्रत्येक को लिखने के कई तरीके हैं, जिनमें से प्रत्येक एनएफसी और एक एनएफडी है, लेकिन अन्य भी मौजूद हैं। यह कोई मामला नहीं है कि केवल एक कोड बिंदु है। पहले के लिए NFD है "o\x{332}\x{303}\x{304}", और NFC है "\x{22D}\x{332}"। दूसरे के लिए NFD है "o\x{332}\x{304}\x{303}"और NFC है "\x{14D}\x{332}\x{303}"। हालांकि, कई गैर-विहित संभावनाएं मौजूद हैं जो कैनोनिक रूप से इन के बराबर हैं। सामान्यीकरण कैनोनिक रूप से समकक्ष अंगूरों की द्विआधारी तुलना की अनुमति देता है।
1

5

यदि दो यूनिकोड स्ट्रिंग्स कैनोनिक रूप से समतुल्य हैं तो स्ट्रिंग्स वास्तव में एक ही हैं, केवल विभिन्न यूनिकोड अनुक्रमों का उपयोग करना। उदाहरण के लिए using का प्रतिनिधित्व या तो चरित्र the या A और be के संयोजन का उपयोग करके किया जा सकता है।

यदि तार केवल संगतता के बराबर होते हैं तो तार आवश्यक रूप से समान नहीं होते हैं, लेकिन वे कुछ संदर्भों में समान हो सकते हैं। जैसे Eg को ff के समान माना जा सकता है।

इसलिए, यदि आप तार की तुलना कर रहे हैं तो आपको कैनोनिकल तुल्यता का उपयोग करना चाहिए, क्योंकि संगतता तुल्यता वास्तविक तुल्यता नहीं है।

लेकिन अगर आप तार के एक सेट को क्रमबद्ध करना चाहते हैं, तो यह अनुकूलता समतुल्यता का उपयोग करने के लिए समझ में आता है क्योंकि लगभग समान हैं।


5

यह वास्तव में काफी सरल है। यूटीएफ -8 वास्तव में एक ही "चरित्र" के कई अलग-अलग प्रतिनिधित्व हैं। (मैं बाइट-वार के बाद से कोट में चरित्र का उपयोग करता हूं वे अलग हैं, लेकिन व्यावहारिक रूप से वे समान हैं)। लिंक किए गए दस्तावेज़ में एक उदाहरण दिया गया है।

चरित्र "sequence" को बाइट अनुक्रम 0xc387 के रूप में दर्शाया जा सकता है। लेकिन इसे Cबाइट अनुक्रम 0xcca7 द्वारा अनुवर्ती (0x43) द्वारा भी दर्शाया जा सकता है । तो आप कह सकते हैं कि 0xc387 और 0x43cca7 एक ही चरित्र हैं। काम करने का कारण यह है कि 0xcca7 एक संयोजन चिह्न है; यह कहना है कि यह चरित्र को इससे पहले ( Cयहां) ले जाता है, और इसे संशोधित करता है।

अब, जहां तक ​​कैनोनिकल तुल्यता बनाम संगतता तुल्यता के बीच का अंतर है, हमें सामान्य रूप से पात्रों को देखने की जरूरत है।

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

कैनोनिकल तुल्यता वह जगह है जहाँ बाइट अनुक्रम समान अर्थ के साथ एक ही चरित्र प्रदान कर रहा है। संगतता तुल्यता तब होती है जब बाइट अनुक्रम एक ही आधार अर्थ के साथ एक अलग चरित्र प्रदान कर रहा है (भले ही इसे बदल दिया जाए)। 9 और 9 संगतता बराबर हैं क्योंकि वे दोनों "9" का मतलब है, लेकिन कैनोनिक रूप से समकक्ष नहीं हैं क्योंकि उनके पास समान प्रतिनिधित्व नहीं है।


@ टिचर: जवाब फिर से पढ़ें। मैंने कभी भी समान कोड बिंदु का प्रतिनिधित्व करने के विभिन्न तरीकों का उल्लेख नहीं किया। मैंने कहा कि एक ही मुद्रित चरित्र (संयोजनकर्ताओं और कई पात्रों के माध्यम से) का प्रतिनिधित्व करने के कई तरीके हैं । जो UTF-8 और Unicode दोनों पर लागू होता है। इसलिए आपका अपमान और टिप्पणी वास्तव में मेरे द्वारा कही गई बातों पर लागू नहीं होती है। वास्तव में, मैं मूल रूप से एक ही बिंदु बना रहा था कि यहां शीर्ष पोस्टर बनाया गया था (यद्यपि नहीं भी)
ircmaxell

4

क्या आपके लिए कैनोनिकल तुल्यता या संगतता तुल्यता अधिक प्रासंगिक है, आपके आवेदन पर निर्भर करता है। स्ट्रिंग तुलना के बारे में सोचने का ASCII तरीका विहित रूप से विहित समतुल्य मानचित्रों की तुलना करता है, लेकिन यूनिकोड बहुत सी भाषाओं का प्रतिनिधित्व करता है। मुझे नहीं लगता कि यह मानना ​​सुरक्षित है कि यूनिकोड सभी भाषाओं को एक तरह से कूटबद्ध करता है, जिससे आप उन्हें पश्चिमी यूरोपीय ASCII की तरह व्यवहार कर सकते हैं।

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

यूनिकोड टेक्स्ट प्रोसेसिंग का कठिन सच यह है कि आपको अपने एप्लिकेशन की टेक्स्ट प्रोसेसिंग आवश्यकताओं के बारे में गहराई से सोचना होगा, और फिर उन्हें उपलब्ध साधनों से संबोधित कर सकते हैं। यह आपके प्रश्न को सीधे संबोधित नहीं करता है, लेकिन अधिक विस्तृत उत्तर के लिए उन भाषाओं में से प्रत्येक के लिए भाषाई विशेषज्ञों की आवश्यकता होगी, जिन्हें आप समर्थन की उम्मीद करते हैं।


1

तुलना तार की समस्या : अधिकांश अनुप्रयोगों के उद्देश्यों के लिए सामग्री के साथ दो तार अलग वर्ण अनुक्रम हो सकते हैं।

यूनिकोड की विहित समतुल्यता देखें : यदि तुलना एल्गोरिथ्म सरल है (या तेज होना चाहिए), यूनिकोड समतुल्य प्रदर्शन नहीं किया गया है। उदाहरण के लिए, XML विहित तुलना में यह समस्या होती है, http://www.w3.org/TR/xml-c14n देखें

इस समस्या से बचने के लिए ... किस मानक का उपयोग करें? "विस्तारित UTF8" या "कॉम्पैक्ट UTF8"?
"Ç" या "c + ◌̧" का उपयोग करें?

W3C और अन्य (भूतपूर्व फ़ाइल नाम ) "कैनोनिकल के रूप में रचित" का उपयोग करने का सुझाव देते हैं ("सबसे कॉम्पैक्ट" छोटी स्ट्रिंग्स के सी को ध्यान में रखें) ... तो

मानक C है ! संदेह में एनएफसी का उपयोग करें

इंटरऑपरेबिलिटी के लिए, और "कॉन्फिगरेशन ओवर कॉन्फिगरेशन" विकल्पों के लिए , एनएफसी का उपयोग बाहरी स्ट्रिंग्स को "कैनोनीज" करने के लिए किया जाता है। उदाहरण के लिए, कैनोनिकल एक्सएमएल को स्टोर करने के लिए, इसे "FORM_C" में स्टोर करें। वेब वर्किंग ग्रुप पर W3C के CSV ने NFC (धारा 7.2) को भी शामिल किया है।

PS: de "FORM_C" अधिकांश पुस्तकालयों में डिफ़ॉल्ट रूप है। पूर्व। PHP के normalizer.isnormalized () में


" कंपोस्टियन फॉर्म" ( FORM_C) शब्द का उपयोग दोनों के लिए किया जाता है, यह कहने के लिए कि "एक स्ट्रिंग सी-कैनोनिकल फॉर्म में है" (एक एनएफसी परिवर्तन का परिणाम) और यह कहना कि एक ट्रांसफॉर्मिंग एल्गोरिथ्म का उपयोग किया जाता है ... देखें http: //www.macchiato.com/unicode/nfc-faq

(...) निम्नलिखित अनुक्रमों में से प्रत्येक (पहले दो एकल चरित्र अनुक्रम हैं) एक ही चरित्र का प्रतिनिधित्व करते हैं:

  1. U + 00C5 (Å) RATING ABOVE के साथ LATIN CAPITAL LETTER A
  2. U + 212B (Å) ANGSTROM साइन
  3. U + 0041 (A) लेटिन कैपिटल लेटर A + U + 030A (̊) कॉम्बिंग रिंग ABOVE

इन अनुक्रमों को विहित रूप से समतुल्य कहा जाता है। इनमें से पहला रूप एनएफसी कहा जाता है - सामान्यीकरण फॉर्म सी के लिए, जहां सी खाद के लिए है । (...) एक स्ट्रिंग S को NFC रूप में बदलने वाले फ़ंक्शन को संक्षिप्त रूप में देखा जा सकता है toNFC(S), जबकि एक परीक्षण जो कि S NFC में है, के रूप में संक्षिप्त है isNFC(S)


नोट: छोटे तारों (शुद्ध UTF-8 या XML-निकाय संदर्भ) के सामान्यीकरण का परीक्षण करने के लिए, आप इस परीक्षण का उपयोग कर सकते हैं / ऑनलाइन कनवर्टर को सामान्य कर सकते हैं ।


मैं उलझन में हूं। मैं इस ऑनलाइन परीक्षक पृष्ठ पर गया और मैंने वहां दर्ज किया: "TÉST Meas pleasé।" और दिए गए सभी 4 सामान्यीकरणों को आज़माएं - कोई भी मेरे पाठ को किसी भी तरह से नहीं बदलता है, ठीक है, सिवाय इसके कि यह उन कोड को प्रस्तुत करने के लिए उपयोग किए गए कोड को बदलता है। क्या मैं गलत तरीके से सोच रहा हूं कि "सामान्यीकरण" का अर्थ है "सभी नृतत्वशास्त्र और समान को हटा दें", और इसका वास्तव में मतलब है - बस यूथ कोडिंग को नीचे बदलना?
यूजरफुसर

हाय @userfuser शायद आपको आवेदन के बारे में एक स्थिति की आवश्यकता है: तुलना करना है अपने पाठ की या मानकीकरण करने के लिए है ? यहां मेरा पोस्ट केवल "मानकीकृत" अनुप्रयोगों के बारे में है। पुनश्च: जब सारी दुनिया मानक का उपयोग करती है, तो तुलना समस्या गायब हो जाती है।
पीटर क्रस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.