Специальная разница в поведении сравнения символов между Windows и Linux - PullRequest
0 голосов
/ 01 февраля 2020

Мне пришлось сравнить последовательность японских символов для сортировки. На платформе Windows я использую функцию CompareStringW, а на платформе Linux я использую функцию wcscasecmp для сравнения. При сравнении приведенных ниже последовательностей символов UTF-16 выходные данные функций отличаются.

Строка 1 - {0x65e5, 0x672c}

Строка 2 - {0xff7a, 0xff8a}

В Windows CompareStringW возвращает CSTR_GREATER_THAN, что означает, что строка 1 больше. Где, как и в Linux, wcscasecmp возвращает '-39317', что означает, что строка 2. больше.

Функция Windows вызывается с флагами (NORM_IGNORECASE | NORM_IGNOREKANATYPE | NORM_IGNOREWIDTH | SORT_STRINGSORT).

Может ли кто-нибудь помочь мне понять, почему поведение на разных платформах отличается? И есть ли способ получить такое же поведение на разных платформах?

...