2010-08-04 25 views
7

में समान ASCII वर्ण खोजें क्या किसी को यूनिकोड में वर्णों को खोजने का एक आसान तरीका पता है जो ASCII वर्णों के समान हैं। एक उदाहरण है "CYRILLIC SMALL LETTER DZE (ѕ)"। मैं एक खोज करना चाहता हूं और समान पात्रों के लिए प्रतिस्थापित करना चाहता हूं। इसी तरह से मेरा मतलब मानव पठनीय है। आप इसे देखकर एक अंतर नहीं देख सकते हैं।यूनिकोड

उत्तर

11

जैसा कि अन्य टिप्पणीकर्ताओं ने उल्लेख किया है, Unicode normalisation ("compatibilty characters") यहां आपकी सहायता नहीं करेगा क्योंकि आप आधिकारिक समकक्षों की तलाश नहीं कर रहे हैं, लेकिन ग्लाइफ (अक्षर आकार) में समानताओं के लिए। (लिंक्ड यूनिकोड तकनीकी रिपोर्ट अभी भी पढ़ने योग्य है, हालांकि, यह बेहद अच्छी तरह लिखी गई है।)

यदि मैं आप थे, तो आप पात्रों की एक सूची को इकट्ठा करने के कठिन काम को छोड़ने के लिए, मैं संसाधनों की खोज करूंगा homograph attacks पर: यह डोमेन नाम वाले यूआरएल प्रदर्शित करके दुर्भावनापूर्ण रूप से भ्रामक वेब उपयोगकर्ताओं का एक तरीका है जिसमें कुछ अक्षरों को दृष्टिहीन समान अक्षरों से प्रतिस्थापित किया गया है। सुरक्षा पर एक और Unicode Technical Report, समस्या पर एक अनुभाग शामिल है। वहाँ भी है - और यह हो सकता है कि आपको सबसे ज्यादा आवश्यकता हो - "confusables" table। मुख्य रूप से विराम चिह्नों के साथ एक और आलेख यहां दिया गया है, जिनमें से कुछ ASCII हैं, जिनके पास non-ASCII code tables में दृश्यमान समान समकक्ष हैं।

मुझे उम्मीद है कि आप इस तरह के हमले के निर्माण के लिए सवाल नहीं पूछ रहे हैं।

+0

सभी अच्छे लिंक और स्पष्टीकरण के लिए धन्यवाद। मैं वास्तव में ऐसे हमलों से बचाने की कोशिश करता हूं। :-) और मुझे लगता है कि मुझे "होमोग्राफ हमले" कीवर्ड के साथ कुछ और चीजें मिलेंगी। – DrDol

+0

यह सुनना अच्छा है :)। हाँ, यह वही कीवर्ड है जिसकी आपको आवश्यकता है! मैंने एक लिंक संपादित किया (यह एक अप्रचलित संस्करण की ओर इशारा किया)। – chryss

+0

एक वैध उपयोग: अंतर्राष्ट्रीयकरण परीक्षण के लिए, मेरे पास एक ऐसा उपकरण है जो समान दिखने वाले वर्णों का उपयोग करके नकली विदेशी भाषा पाठ उत्पन्न करता है। एक अंग्रेजी भाषी परीक्षक "विदेशी" पाठ पढ़ सकता है, लेकिन वे यह भी स्पष्ट रूप से बता सकते हैं कि यह अंग्रेजी को हार्ड-कोड नहीं किया गया है। यद्यपि यह काम नहीं करता है अगर यूनिकोड चरित्र इतना समान है कि आप अंतर नहीं बता सकते हैं। मैं मुख्य रूप से स्वरों को उच्चारण जोड़ने जैसे चीजें करता हूं। – Kip

-1

यूनिकोड डेटाबेस देखें: http://www.unicode.org/Public/UNIDATA/UnicodeData.txt

प्रत्येक पंक्ति एक यूनिकोड caharacter का वर्णन करता है, उदाहरण के लिए:

1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;<compat> 0061 02BE;;;;N;;;;; 

हैं कि प्रतीक के लिए किसी भी इसी तरह (संगत) वर्ण है वहाँ है, यह प्रवेश की <compat> क्षेत्र में दिखाई देगा। इस उदाहरण में, 0061 (ASCII a) LATIN SMALL LETTER A WITH RIGHT HALF RING यूनिकोड वर्ण के अनुकूल है।

अपने चरित्र के रूप में, प्रविष्टि

0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405 

जो, जैसा कि आप देख सकते हैं, एक संगतता चरित्र निर्दिष्ट नहीं करता है।

+0

संगतता फ़ील्ड वर्णों के अनुक्रम का वर्णन करती है जिसका अर्थ चरित्र के समान ही होगा। आपके उदाहरण में, संगत अनुक्रम 'यू +0061' (अक्षर' ए ') होगा जिसके बाद' यू + 02 बीई '(' दाएं आधा अंगूठी 'संशोधक) होगा। अलग-अलग अक्षरों के पात्रों के लिए, संगतता अनुक्रम होने के लिए यह बहुत असामान्य होगा - और जो ओपी अधिक जानकारी के बिना असंभव करने की कोशिश कर रहा है। – cHao

+0

ओपी ने 'ASCII वर्णों के समान' कहा, सटीक नहीं। यदि आप दाएं आधे अंगूठी के साथ 'ए' की तलाश में हैं, तो आप कुछ भी उपलब्ध नहीं होने पर एएससीआईआई 'ए' के ​​लिए बस सकते हैं। – adamk

+0

सहमत - उस मामले में। लेकिन यदि आप एक एसीसीआईआई चार की तलाश कर रहे हैं जैसे कि सिरिलिक और # x0455 ;, ओपी का बहुत ही उदाहरण है, जो काम नहीं करेगा। – cHao