2010-05-20 10 views
8

की तुलना जब "इल" और "इले" तुलना, सी # एक ही होने के लिए इन पर विचार नहीं करता।समस्या फ्रेंच चरित्र मैं

string.Equals("Île", "Ile", StringComparison.InvariantCultureIgnoreCase) 

अन्य सभी उच्चारण वर्णों के लिए मैं तुलना में ठीक काम करता हूं।

क्या कोई अन्य तुलनात्मक कार्य है जिसका उपयोग करना चाहिए?

उत्तर

6

आप अपरिवर्तनीय संस्कृति की तुलना नियमों का उपयोग कर तार की तुलना करने को निर्दिष्ट कर रहे हैं। जाहिर है, परिवर्तनीय संस्कृति में, दो तारों को बराबर नहीं माना जाता है।

आप String.Compare का उपयोग कर और संस्कृति है जिसके लिए आप तार की तुलना करना चाहते उपलब्ध कराने के एक संस्कृति विशिष्ट ढंग से उनकी तुलना कर सकते हैं:

if(String.Compare("Île", "Ile", new CultureInfo("fr-FR"), CompareOptions.None)==0) 

कृपया ध्यान दें कि फ्रेंच संस्कृति में, उन तार भी कर रहे हैं अलग माना जाता है। मैंने यह दिखाने के लिए उदाहरण शामिल किया, कि यह ऐसी संस्कृति है जो सॉर्ट नियमों को परिभाषित करती है। हो सकता है कि आप ऐसी संस्कृति ढूंढ सकें जो आपकी आवश्यकताओं को फिट करे, या आवश्यक तुलना नियमों के साथ एक कस्टम बनाएं, लेकिन संभवतः यह संभव नहीं है कि आप क्या चाहते हैं।

स्ट्रिंग सामान्य इसलिए कोई लहजे कर रहे हैं, have a look at this question का एक अच्छा उदाहरण के लिए

। स्ट्रिंग को सामान्य करने के बाद, आप उनकी तुलना करने और उन्हें बराबर मानने में सक्षम होंगे। यह आपकी आवश्यकता को लागू करने का सबसे आसान तरीका होगा।

संपादित

यह न सिर्फ मैं चरित्र InvariantCulture में इस व्यवहार है, इस बयान भी झूठे रिटर्न जाता है:

String.Equals("Ilê", "Ile", StringComparison.InvariantCultureIgnoreCase) 

ढांचा सही काम करता है - उन अक्षरों तथ्य अलग कर रहे हैं (अलग अर्थ है) अधिकांश संस्कृतियों में, और इसलिए उन्हें समान नहीं माना जाना चाहिए।

+0

बस कोशिश की, +1 लौटाता है। – Bryan

+0

यहां तक ​​कि अगर यह काम करता है, तो यह मुझे अजीब लगता है कि समस्या उस चरित्र के लिए विशेष है। – Bryan

+0

@ ब्रायन: 'Î' यू +00 सीई है, 'मैं यू +0049 है, वे पूरी तरह से अलग हैं। – kennytm

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