比较法国字符Î的问题

时间:2010-05-20 17:24:28

标签: c# string compare culture

当比较“Île”和“Ile”时,C#并不认为它们是相同的。

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

对于我遇到的所有其他重音字符,比较工作正常。

我应该使用另一种比较功能吗?

1 个答案:

答案 0 :(得分:6)

您指定使用Invariant culture的比较规则比较字符串。显然,在不变的文化中,两个字符串被认为是不相等的。

您可以使用String.Compare以特定于文化的方式比较它们,并提供您要比较字符串的文化:

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

请注意,在法国文化中,这些字符串也被视为不同。我列举了一个示例来表明,它是定义排序规则的文化。您可能能够找到符合您要求的文化,或者使用所需的比较规则构建自定义文化,但它可能不是您想要的。

有关标准化字符串的一个很好的例子,因此没有重音,have a look at this question。规范化字符串后,您将能够比较它们并将它们视为相等。这可能是实现您的要求的最简单方法。

修改

不仅仅是在InvariantCulture中具有此行为的I字符,此语句也返回false:

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

框架是正确的 - 在大多数文化中,这些角色实际上是不同的(具有不同的含义),因此它们不应被视为相同。