डेवलपर टूल · पाठ तुलना
अदृश्य अंतर: नॉन-ब्रेकिंग स्पेस, स्मार्ट कोट्स और यूनिकोड फॉर्म
· यह काम किस प्रकार करता है
पाठ-अंतर यूनिकोड डिबगिंग
बताते हैं कि स्क्रीन पर एक जैसी दिखने वाली लाइनें बाइट दर बाइट भिन्न क्यों हो सकती हैं, नॉन-ब्रेकिंग स्पेस और घुंघराले उद्धरण से लेकर शून्य-चौड़ाई वाले वर्ण और विघटित उच्चारण तक, और उन्हें कैसे ढूंढें।
दो पंक्तियाँ जो समान दिखती हैं लेकिन परिवर्तित के रूप में चिह्नित की गई हैं - एक अनुवाद फ़ाइल के साथ खुलती हैं जो बिना किसी स्पष्ट कारण के समीक्षा में विफल हो जाती है
एक अनुवाद पंक्ति बिल्कुल अपने पड़ोसी की तरह प्रस्तुत हो सकती है और फिर भी तुलना में विफल हो सकती है। ब्राउज़र फ़ॉन्ट कोड-बिंदु सीमाओं को छिपाते हैं, उच्चारण जोड़ते हैं और विभिन्न विराम चिह्नों को समान आकार प्रदान करते हैं। ToolAcre केवल चयनित केस या व्हाइटस्पेस परिवर्तनों के बाद JavaScript स्ट्रिंग्स की तुलना करता है, इसलिए एक ध्वजांकित पंक्ति वास्तविक पाठ्य भेद को उजागर कर सकती है।
स्थान पर भरोसा करें, चरित्र के बारे में किसी धारणा पर नहीं। संदिग्ध पंक्ति को ऐसे एडिटर में कॉपी करें जो कोड बिंदु या हेक्साडेसिमल निरीक्षक को प्रकट करता हो। अंतर आपको बताता है कि कौन सी रेखा भिन्न है; यह आंतरिक स्थिति की व्याख्या नहीं करता है या यूनिकोड मान को जिम्मेदार नहीं बताता है।
नॉन-ब्रेकिंग स्पेस और उनके रिश्तेदार - U+00A0 और अन्य स्पेस कैरेक्टर बताते हैं जो वर्ड प्रोसेसर डालते हैं और एक सादा स्पेस उनसे मेल क्यों नहीं खाता है
U+00A0 नॉन-ब्रेकिंग स्पेस, U+0020 सामान्य स्पेस के समान वर्ण नहीं है। सामान्य मोड में उनकी लाइन कुंजियाँ अलग रहती हैं। व्हाइटस्पेस को अनदेखा करें के तहत, व्हाइटस्पेस-रन प्रतिस्थापन ट्रिमिंग के बाद उन रनों को सामान्य स्थान पर कम कर सकता है, जिससे ऐसे कुछ अंतर गायब हो जाते हैं।
वह विकल्प एक मिलान परिवर्तन है, यूनिकोड क्लीनअप कमांड नहीं। प्रदर्शित समान पंक्तियाँ मूल बाएँ पाठ को बरकरार रखती हैं, और कोई भी संशोधित दस्तावेज़ तैयार नहीं किया जाता है। यदि किसी प्रकाशन प्रणाली को नॉन-ब्रेकिंग रिक्ति की आवश्यकता होती है, तो एक सामान्यीकृत मिलान जानबूझकर लेआउट निर्देश को ठीक करने के बजाय छिपा सकता है।
व्हाइटस्पेस मोड यूनिकोड व्हाइटस्पेस को ध्वस्त कर सकता है; सामान्य तुलना विशिष्ट वर्णों को सुरक्षित रखती है
सीधे एपॉस्ट्रॉफ़ और उद्धरण चिह्न टाइपोग्राफ़िक उद्घाटन और समापन रूपों से भिन्न होते हैं। इग्नोर केस से विराम चिह्न नहीं बदलता है, और व्हॉट्सएप हैंडलिंग उद्धरणों को दोबारा नहीं लिखती है। इसलिए एक वर्ड प्रोसेसर का स्वत: सुधार एक पूर्ण-पंक्ति प्रतिस्थापन उत्पन्न कर सकता है, भले ही वाक्य एक नज़र में समान रूप से पढ़ा जाता हो।
गंतव्य के आधार पर इच्छित विराम चिह्न चुनें। स्रोत कोड, खोज कुंजी और डेटा प्रारूपों के लिए सटीक ASCII वर्णों की आवश्यकता हो सकती है, जबकि एडिटरीय प्रतिलिपि टाइपोग्राफ़िक रूपों को प्राथमिकता दे सकती है। तुलना से अंतर तो सिद्ध होता है, परंतु कौन सा पक्ष सही है, इसका निर्णय करने की उसकी कोई नीति नहीं है।
शून्य-चौड़ाई और दिशात्मक वर्ण - शून्य-चौड़ाई वाले स्थान, जॉइनर्स और द्विदिश चिह्नों को कवर करते हैं जो लाइन को बदलने के बावजूद कुछ भी नहीं प्रस्तुत करते हैं
शून्य-चौड़ाई वाले स्थान, जॉइनर्स और दिशात्मक चिह्न दृश्य ग्लिफ़ को चित्रित किए बिना स्ट्रिंग स्थिति पर कब्जा कर सकते हैं। ToolAcre पाठ सामग्री का उपयोग करके इनपुट प्रस्तुत करता है, HTML व्याख्या से बचता है, लेकिन वह सुरक्षित प्रतिपादन छिपे हुए कोड बिंदुओं को दृश्यमान नहीं बनाता है। वे अभी भी साधारण रेखा समानता में भाग लेते हैं।
दिशात्मक व्यवहार दृश्य क्रम को भंडारण क्रम के लिए एक अविश्वसनीय गाइड भी बना सकता है। किसी संदिग्ध मिश्रित-दिशा वाले टुकड़े को शेल कमांड या पहचानकर्ता में केवल इसलिए कॉपी न करें क्योंकि यह परिचित लगता है। कुछ भी बदलने से पहले उद्देश्य-निर्मित टूल में कोड बिंदुओं और आसपास के संदर्भ का निरीक्षण करें।
रचित और विघटित उच्चारण - NFC बनाम NFD सामान्यीकरण को एक उच्चारण अक्षर के साथ एक कोड बिंदु बनाम एक आधार अक्षर और एक संयोजन चिह्न के रूप में समझाता है
एक उच्चारण वर्ण को एक पूर्वनिर्मित कोड बिंदु के रूप में या एक संयोजन चिह्न के बाद आधार अक्षर के रूप में दर्शाया जा सकता है। रिपॉजिटरी में `normalize` के लिए कोई कॉल नहीं है, इसलिए प्रामाणिक रूप से समतुल्य दिखने वाले फॉर्म अलग-अलग JavaScript स्ट्रिंग बने रहते हैं और रिमूव-प्लस-ऐड पंक्तियाँ उत्पन्न कर सकते हैं।
परीक्षण सूट समान यूनिकोड स्ट्रिंग्स से मेल खाता है और `café` `cafe` से भिन्न है; यह ग्रेफेम-जागरूक तुलना का वादा नहीं करता है। इसलिए यह लेख बाइट तुलना या पूर्ण यूनिकोड समकक्षता के दावों से बचता है। लाइन एल्गोरिदम स्ट्रिंग्स प्राप्त करता है और उनकी रूपांतरित कुंजियों की सख्त समानता के साथ तुलना करता है।
रचित और विघटित उच्चारण अलग-अलग रहते हैं क्योंकि टूल कोई यूनिकोड सामान्यीकरण नहीं करता है
मान लीजिए कि एक संसाधन पंक्ति अपरिवर्तित दिखाई देती है लेकिन ध्वजांकित है। पहले सभी विकल्पों को बंद करके तुलना करें, फिर केवल रिक्त स्थान को टॉगल करें। यदि पंक्ति बराबर हो जाती है, तो रिक्त स्थान और छिपे हुए रिक्त स्थान का निरीक्षण करें। यदि यह बदला हुआ रहता है, तो लाइन को बार-बार दोबारा टाइप करने के बजाय उद्धरण चिह्नों, संयोजन चिह्नों और अन्य कोड बिंदुओं का निरीक्षण करें।
एक चरित्र निरीक्षक U+00A0 प्रकट कर सकता है जहां एक सामान्य स्थान अपेक्षित था। प्रारूप की आवश्यकता की पुष्टि करने के बाद ही इसे बदलें। अनुवादित सामग्री में, गैर-ब्रेकिंग रिक्त स्थान जानबूझकर विराम चिह्न हो सकते हैं, और एक व्यापक खोज-और-प्रतिस्थापन कहीं और सही टाइपोग्राफी को नुकसान पहुंचा सकता है।
इसमें क्या शामिल नहीं है - तुलना रिपोर्ट करती है कि पंक्तियाँ भिन्न हैं; यह आपके लिए यूनिकोड सामान्यीकरण नहीं करता है या वर्णों को प्रतिस्थापित नहीं करता है
टेक्स्ट अंतर NFC या NFD को सामान्य नहीं करता है, कन्फ़्यूज़ेबल्स की पहचान नहीं करता है, शून्य-चौड़ाई के निशान नहीं हटाता है या मरम्मत किए गए आउटपुट का उत्पादन नहीं करता है। यह एन्कोडेड बाइट्स की तुलना भी नहीं करता है। वे परिणाम वाले अलग-अलग ऑपरेशन हैं जिन्हें एक सामान्य लाइन तुलनित्र को चुपचाप नहीं चुनना चाहिए।
इग्नोर केस JavaScript `toLowerCase` का उपयोग करता है, जबकि व्हॉट्सएप ट्रिम्स को इग्नोर करें और मिलान कुंजियों को संक्षिप्त करें। कोई भी ऑपरेशन स्थानीय-जागरूक संकलन या यूनिकोड सुरक्षा समीक्षा की आपूर्ति नहीं करता है। किसी जांच को सीमित करने के लिए आउटपुट का उपयोग करें, न कि पहचानकर्ताओं को सुरक्षित या भाषाई रूप से समकक्ष प्रमाणित करने के लिए।
टेकअवे: अपनी आंखों के अंतर पर भरोसा करें - यह निष्कर्ष निकालता है कि एक ध्वजांकित रेखा एक वास्तविक अंतर है और दिखाती है कि कैसे ToolAcre की पाठ तुलना यह इंगित करती है कि किन रेखाओं का निरीक्षण करना है
जब दृष्टि और अंतर असहमत हों, तो मान लें कि स्ट्रिंग निरीक्षण के योग्य है। एल्गोरिदम में कोई दृश्य मॉडल नहीं है जिसे फ़ॉन्ट आकार देकर मूर्ख बनाया जा सके; यह लाइन कुंजियाँ देखता है। वह सीमा उपयोगी है क्योंकि यह छिपे हुए मतभेदों को केवल इसलिए समाप्त होने से रोकती है क्योंकि ब्राउज़र उन्हें समान रूप से खींचता है।
पहले सामान्य तुलना चलाएँ, रिकॉर्ड करें कि कौन सा विकल्प परिणाम बदलता है, और संपादन से पहले कोड बिंदुओं का निरीक्षण करें। यह साक्ष्य पथ व्हॉट्सएप सामान्यीकरण को विराम चिह्न या रचना से अलग करता है और प्रत्येक असामान्य वर्ण को ASCII सन्निकटन के साथ बदलने की विनाशकारी आदत से बचाता है।