2010-05-20 97 views
8

比較「Île」和「Ile」時,C#不認爲這些是相同的。比較法語字符的問題Î

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的這種行爲我的性格,這種說法也返回false:

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

框架做正確的事 - 這些角色其實都是不同(具有不同的含義)在大多數文化中,因此他們不應該被認爲是相同的。

+0

剛剛嘗試過,返回+1。 – Bryan 2010-05-20 17:53:52

+0

即使這種方法奏效,它讓我覺得奇怪的是,這個問題是特定於這個角色的。 – Bryan 2010-05-20 17:54:51

+0

@Bryan:'Î'是U + 00CE,'I'是U + 0049,它們完全不同。 – kennytm 2010-05-20 17:59:07