Странные результаты из IndexOf на немецкой строке - PullRequest
9 голосов
/ 13 февраля 2012

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

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

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

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

enter image description here

Ответы [ 2 ]

3 голосов
/ 16 февраля 2012

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

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

1 голос
/ 13 февраля 2012

IndexOf использует текущую культуру, если не указано иное:

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

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

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

...