Проблема, сравнивающая французский символ +

При сравнении "Île" и "Ile", C# не полагает, что это, чтобы быть тем же.

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

Для всех других символов с диакритикой я столкнулся со сравнением, хорошо работает.

Есть ли другая функция сравнения, которую я должен использовать?

8
задан Bryan 20 May 2010 в 17:24
поделиться

1 ответ

Вы указываете сравнить строки, используя правила сравнения инвариантной культуры. Очевидно, в инвариантной культуре эти две строки не считаются равными.

Вы можете сравнить их в зависимости от культуры, используя String.Compare и указав культуру, для которой вы хотите сравнить строки:

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

Обратите внимание, что во французской культуре эти строки также считаются разными. Я включил этот пример, чтобы показать, что именно культура определяет правила сортировки. Возможно, вы сможете найти культуру, соответствующую вашим требованиям, или создать собственную культуру с необходимыми правилами сравнения, но это, вероятно, не то, что вам нужно.

Для хорошего примера нормализации строки, чтобы не было акцентов, посмотрите этот вопрос. После нормализации строки вы сможете сравнить их и считать равными. Это, вероятно, самый простой способ реализовать ваше требование.

Редактировать

Не только символ I имеет такое поведение в InvariantCulture, это утверждение также возвращает false:

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

Фреймворк поступает правильно - эти символы на самом деле разные (имеют разное значение) в большинстве культур, и поэтому их не следует считать одинаковыми.

6
ответ дан 5 December 2019 в 22:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: