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
,