Странные результаты IndexOf на немецкой струне

У меня есть строка "Ärger, -Ökonom-i-Übermut-ẞ-ß", и когда я запускаю IndexOf ( "-" ), я получаю результат 23. Если я использую Replace на той же строке, ничего не заменяется.

Я не понимаю, что происходит, так может кто-то пролить свет на эту проблему? Культура приложения установлена ​​на хорватском, это не немецком языке, а каркасная версия - 3.5.

Изменение культуры на немецкий (de-DE) не изменяет этого странного поведения.

Вот скриншот от отладчика:

enter image description here

Ответ 1

Поскольку г-н Листер не хочет заслуженных заслуг, я вставлю здесь свой комментарий и приму ответ.

Я боюсь, что U + 1E9E undefined в соответствии с .NET 3.5, потому что этот символ не существовал в Unicode 4.0 (или любой другой версии Использование Unicode.NET 3.5). Это довольно новое дополнение (версия в верхнем регистре немецкого языка ß). Поэтому функция IndexOf игнорирует ее. Если у тебя есть контроль над текстом, вы можете изменить символ на ß или SS, что более целесообразно. Конечно, лучшим решением является обновите .NET до версии 4.0!

Ответ 2

IndexOf использует текущую культуру, если вы не говорите об этом иначе:

Этот метод выполняет слово (чувствительный к регистру и чувствительный к культуре) поиск с использованием текущей культуры.

Replace использует порядковое сравнение:

Этот метод выполняет порядковый номер (с учетом регистра и нечувствительность к культуре), чтобы найти oldValue.