8

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

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

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

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

4

1 回答 1

6

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

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

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

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

对于规范化字符串以便没有重音符号的一个很好的例子,看看这个问题。规范化字符串后,您将能够比较它们并认为它们相等。这可能是实现您的要求的最简单方法。

编辑

在 InvariantCulture 中不仅 I 字符具有这种行为,该语句也返回 false:

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

该框架做了正确的事情——这些字符在大多数文化中实际上是不同的(具有不同的含义),因此它们不应被视为相同。

于 2010-05-20T17:45:02.060 回答