2010-05-20 18 views
8

"Île" ve "Ile" yi karşılaştırırken C#, bunların aynı olduğunu düşünmüyor.Fransız karakterini karşılaştıran problem Î

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

Diğer tüm aksanlı karakterler için karşılaştırma karşılaştırması yapıyorum.

Kullanmam gereken başka bir karşılaştırma işlevi var mı?

cevap

6

Dizeleri Invariant kültürünün karşılaştırma kurallarını kullanarak karşılaştırmayı planlıyorsunuz. Açıkça, değişmez kültürde, iki dizge eşit kabul edilmez.

Sen String.Compare kullanarak ve dizeleri karşılaştırmak istediğiniz kültürünü sağlayan bir kültüre özgü bir şekilde onları karşılaştırabilirsiniz:

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

fransız kültürde lütfen unutmayın, bu dizeleri da farklı sayılır. Gösterilecek örneği dahil ettim, sıralama kurallarını tanımlayan kültür. Gereksinimlerinize uyan bir kültür bulabilir veya gerekli karşılaştırma kurallarıyla özel bir tane oluşturabilirsiniz, ancak muhtemelen istediğiniz gibi değil.

Dizenin normalleştirilmesiyle ilgili iyi bir örnek için, hiçbir aksan yok, have a look at this question. Dizeyi normalleştirdikten sonra bunları karşılaştırabilir ve eşit olarak değerlendirebilirsiniz. Bu muhtemelen gereksinimi yerine getirmenin en kolay yolu olacaktır.

Düzenleme

O InvariantCulture bu davranışa sahip değil, sadece ben karakter, bu açıklama da yanlış döndürür:

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

çerçeve doğru olanı yapar - bu karakterler farklı aslında Çoğu kültürde (farklı bir anlamı vardır) ve bu yüzden aynı şekilde düşünülmemelidirler.

+0

Sadece denedim, +1 döndürür. – Bryan

+0

Bu işe yaramasa bile, problemin bu tek karaktere özgü olması beni garip hale getiriyor. – Bryan

+0

@Bryan: 'Î' U + 00CE,' Ben U + 0049, tamamen farklılar. – kennytm