2013-03-23 10 views
10

मैंने सोचा StringComparison.OrdinalIgnoreCase और StringComparison.InvariantCultureIgnoreCase एक ही काम करते हैं जब यह अंग्रेजी-केवल तारों की बात आती है। हालांकि यह निम्न कोड में नहीं है जिस पर मैं काम कर रहा हूं:ऑर्डिनल इग्नोरकेस और InvariantCultureIgnoreCase क्यों अलग-अलग परिणाम देता है?

// Returns 0 
string.Compare("877495169FA05B9D8639A0EBC42022338F7D2324","‎877495169fa05b9d8639a0ebc42022338f7d2324", StringComparison.InvariantCultureIgnoreCase) 

// Returns -1 
string.Compare("877495169FA05B9D8639A0EBC42022338F7D2324","‎877495169fa05b9d8639a0ebc42022338f7d2324", StringComparison.OrdinalIgnoreCase) 

क्या कोई विशेष कारण है?

+2

संभावित डुप्लिकेट [InvariantCulture और साधारण स्ट्रिंग तुलना के बीच अंतर] (http://stackoverflow.com/questions/492799/difference-between-invariantculture-and-ordinal-string-comparision) –

+3

@ डैनियलए। व्हाइट यह प्रश्न है निश्चित रूप से उस प्रश्न का डुप्लिकेट _not_ नहीं है। मुझे लगता है कि आपने इसे पढ़ा नहीं है। – Virtlink

उत्तर

23
"‎877495169fa05b9d8639a0ebc42022338f7d2324" 

एक चाल प्रश्न की तरह लगता है। पहले अंक 8 से पहले, इस स्ट्रिंग पर शुरुआत में एक अतिरिक्त वर्ण है। यह ब्राउज़र में दिखाई नहीं दे रहा है। यह यू + 200 ई है, "बाएं से दाएं मार्क"। औपचारिक तुलना उस चरित्र को देखती है, परिवर्तनीय तुलना इसे अनदेखा करती है। स्ट्रिंग पर ToCharArray() का उपयोग कर आप इसे अपने लिए देख सकते हैं।

कि स्ट्रिंग हटा कर उसके बजाय यह एक पेस्ट, मैं इसे से U + 200E हटाया:

"877495169fa05b9d8639a0ebc42022338f7d2324" 

और तुलना करें() विधि अब 0 रिटर्न की तरह होना चाहिए। उस टेक्स्ट एडिटर या आईएमई के लिए देखें जो आप अभी उपयोग कर रहे हैं। यूनिकोड मज़ा नहीं है?

+0

अच्छी तरह से देखा गया। मेरे नोटपैड ++ में यह एक प्रश्न चिह्न के रूप में दिखाई देता है: '"? 877495169fa05b9d8639a0ebc42022338f7d2324 "'। – Virtlink

+3

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

+1

ठीक है, यह और अधिक समझ में आता है। रिकॉर्ड के लिए: विंडोज के किस भाषा संस्करण ने इसका उत्पादन किया? –

संबंधित मुद्दे