Почему действительно представляет в виде строки. Сравните, кажется, обрабатывают символы с диакритикой несовместимо?

Ваша видеокарта не поддерживает 3-й режим.

я могу быть проблемой с Вашими графическими драйверами. Это происходит часто после обновления ядра. (еще больше, если это - ati или видеокарта Nvidia)

, можно подтвердить это с этой командой: glxinfo | grep представляющий (устанавливают glxinfo, если у Вас нет его)

Вы, возможно, должны переустановить свой графический драйвер, если это - Nvidia или ati.

Оставляют меня комментарием, если Вам нужно больше объяснений.

15
задан Jonathan 3 September 2009 в 07:35
поделиться

3 ответа

В работе работает алгоритм разрешения конфликтов, см. http://unicode.org/reports/tr10/

Для решения сложных вопросов сортировка с учетом языка, многоуровневый алгоритм сравнения заняты. Сравнивая два слова, для Например, наиболее важной функцией является базовый символ: например, разница между A и B. Акцентные различия обычно игнорируется, если есть отличия в базовых буквах. Различия в корпусе (верхний регистр против строчного), являются обычно игнорируется, если есть отличия в базе или акцентах. Пунктуация варьируется. В некоторых ситуации знак препинания рассматривается как базовый персонаж. В в других ситуациях следует игнорировать есть ли база, акцент или случай различия. Также может быть финальный, решающий уровень, в соответствии с которым, если других отличий нет вообще в строке (нормализованный) код используется порядок точек.

Итак, «Munt ...» и «Münc ...» различаются по алфавиту и сортируются на основе «t» и «c».

Принимая во внимание, что «mun» и «mün» "в алфавитном порядке одинаковы (" u "эквивалентно" ü "в потерянных языках), поэтому коды символов сравниваются

23
ответ дан 1 December 2019 в 01:45
поделиться

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

Вот пример кода для демонстрация:

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 - но я недостаточно знаю о них.

Что касается того, нужно ли вам это учитывать ... Я бы этого не ожидал. Что ты делаешь, что подброшено этим?

6
ответ дан 1 December 2019 в 01:45
поделиться

Насколько я понимаю, это все еще несколько согласованно. При сравнении с использованием 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);

дают желаемый результат.

В любом случае, я думаю, вам лучше основывать свою сортировку на определенной культуре, такой как культура текущего пользователя (если возможно).

4
ответ дан 1 December 2019 в 01:45
поделиться
Другие вопросы по тегам:

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