Ваша видеокарта не поддерживает 3-й режим.
я могу быть проблемой с Вашими графическими драйверами. Это происходит часто после обновления ядра. (еще больше, если это - ati или видеокарта Nvidia)
, можно подтвердить это с этой командой: glxinfo | grep представляющий (устанавливают glxinfo, если у Вас нет его)
Вы, возможно, должны переустановить свой графический драйвер, если это - Nvidia или ati.
Оставляют меня комментарием, если Вам нужно больше объяснений.
В работе работает алгоритм разрешения конфликтов, см. http://unicode.org/reports/tr10/
Для решения сложных вопросов сортировка с учетом языка, многоуровневый алгоритм сравнения заняты. Сравнивая два слова, для Например, наиболее важной функцией является базовый символ: например, разница между A и B. Акцентные различия обычно игнорируется, если есть отличия в базовых буквах. Различия в корпусе (верхний регистр против строчного), являются обычно игнорируется, если есть отличия в базе или акцентах. Пунктуация варьируется. В некоторых ситуации знак препинания рассматривается как базовый персонаж. В в других ситуациях следует игнорировать есть ли база, акцент или случай различия. Также может быть финальный, решающий уровень, в соответствии с которым, если других отличий нет вообще в строке (нормализованный) код используется порядок точек.
Итак, «Munt ...» и «Münc ...» различаются по алфавиту и сортируются на основе «t» и «c».
Принимая во внимание, что «mun» и «mün» "в алфавитном порядке одинаковы (" u "эквивалентно" ü "в потерянных языках), поэтому коды символов сравниваются
Похоже, что акцентированный символ используется только в своего рода "тай-брейке" - другими словами, если в остальном строки равны.
Вот пример кода для демонстрация:
using System;
using System.Globalization;
class Test
{
static void Main()
{
Compare("mun", "mün");
Compare("muna", "münb");
Compare("munb", "müna");
}
static void Compare(string x, string y)
{
int result = string.Compare(x, y, true,
CultureInfo.InvariantCulture));
Console.WriteLine("{0}; {1}; {2}", x, y, result);
}
}
(Я также пробовал добавить пробел после "n", чтобы проверить, было ли это сделано на границах слов - это не так.)
Результаты:
mun; mün; -1
muna; münb; -1
munb; müna; 1
Я подозреваю, что это правильно различными сложными правилами Unicode - но я недостаточно знаю о них.
Что касается того, нужно ли вам это учитывать ... Я бы этого не ожидал. Что ты делаешь, что подброшено этим?
Насколько я понимаю, это все еще несколько согласованно. При сравнении с использованием CultureInfo.InvariantCulture
символ умляута ü
обрабатывается как символ без диакритических знаков u
.
Поскольку строки в вашем первом примере явно не равны, результатом будет не 0, а -1 (что, похоже, является значением по умолчанию). Во втором примере Muntelier идет последним, потому что t следует за c в алфавите.
Я не смог найти в MSDN четкую документацию, объясняющую эти правила, но я обнаружил, что
string.Compare("mun", "mün", CultureInfo.InvariantCulture,
CompareOptions.StringSort);
и
string.Compare("Muntelier, Schweiz", "München, Deutschland",
CultureInfo.InvariantCulture, CompareOptions.StringSort);
дают желаемый результат.
В любом случае, я думаю, вам лучше основывать свою сортировку на определенной культуре, такой как культура текущего пользователя (если возможно).