当比较“Île”和“Ile”时,C#并不认为它们是相同的。
string.Equals("Île", "Ile", StringComparison.InvariantCultureIgnoreCase)
对于我遇到的所有其他重音字符,比较工作正常。
我应该使用另一种比较功能吗?
答案 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)
框架是正确的 - 在大多数文化中,这些角色实际上是不同的(具有不同的含义),因此它们不应被视为相同。