wcscoll возвращает результат, отличный от ожидаемого

Рассмотрим этот код:

#include <wchar.h>
#include <locale.h>
#include <stdio.h>

int main(void) {
    setlocale(LC_ALL, "pl_PL.UTF-8");
    printf("%d\n", wcscoll(L"ą", L"b"));
    return 0;
}

Выход

158

Но я ожидаю, что это будет -1, так как just перед b в польском алфавите. Почему он вернул 158? И если не так, как можно сравнивать слова по алфавиту?

2 ответа

Я попробовал это на моей машине с Linux, и я получаю 1 как результат, положительный, как и ваш.

Затем я отредактировал поддерживаемые локали на /etc/locale.gen, без комментариев pl_PL.UTF-8 (не включено по умолчанию), запустите sudo locale-gen и теперь это дает -4, что отрицательно, как и ожидалось.

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

Проверьте возвращаемое значение setlocale; возможно, он не распознает вашу страну / строку кодовой страницы.

Названия локали MS используют тире, а не подчеркивания. Если вы используете Windows, попробуйте пройти pl-PL вместо pl_PL.UTF-8,

Другие вопросы по тегам