代码之家  ›  专栏  ›  技术社区  ›  Bryan

比较法语字符时出现问题

  •  8
  • Bryan  · 技术社区  · 14 年前

    在比较“le”和“ile”时,c_不认为它们是相同的。

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

    对于所有其他口音的字符,我遇到的比较工作很好。

    是否还有其他比较函数需要使用?

    1 回复  |  直到 14 年前
        1
  •  6
  •   Community Paul Sweatte    7 年前

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

    可以使用字符串以特定于区域性的方式比较它们。比较并提供要比较字符串的区域性:

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

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

    对于规范化字符串的一个好例子,这样就没有重音符号了, have a look at this question . 在规范化字符串之后,您将能够比较它们并认为它们是相等的。这可能是实现需求的最简单方法。

    编辑

    在不变区域性中,不仅仅是i字符具有此行为,此语句还返回false:

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

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