Asp.Net / C #, когда Å равно A? (и É равно E) - PullRequest
4 голосов
/ 15 сентября 2009

Я делаю пейджинговые сообщения в странах, где начинаются A-D, E-H и т. Д. Но я также хочу перечислить abrohw на a и pollewop на e. Я попытался использовать string.starts с опцией stringcompare, но она не работает ...

Я работаю под кодом культуры sv-SE, если это имеет значение ...

Michel

Ответы [ 4 ]

6 голосов
/ 15 сентября 2009

См. Как удалить диакритические знаки (акценты) из строки в .NET? для решения для создания версии без диакритических знаков, которую можно использовать для сравнений (при этом по-прежнему отображается версия с диакритические знаки).

4 голосов
/ 15 сентября 2009

О да, культура имеет значение. Если вы запустите следующее:

List<string> letters = new List<string>() { "Å", "B", "A" };

Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("sv-SE");
letters.Sort();
Console.WriteLine("sv-SE:")
letters.ForEach(s => Console.WriteLine(s));   

Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-GB");
letters.Sort();
Console.WriteLine("en-GB:")
letters.ForEach(s => Console.WriteLine(s));

... вы получите следующий вывод:

sv-SE:
A
B
Å
en-GB:
A
Å
B
1 голос
/ 15 сентября 2009

Вы должны будете указать конкретную культуру для сортировки или написать свой собственный компаратор для этого. Порядок сортировки по умолчанию для шведского языка ставит å, ä, ö в конец.

Скорее всего, вы хотите разложить буквы на диакритические знаки и отсортировать их, как если бы они не имели диакритического знака.

1 голос
/ 15 сентября 2009

Попробуйте использовать выбор диапазона вместо точного соответствия.

A: (firstLetter <= A)
B: (firstLetter > A) AND (firstLetter <= B)
...
...