7

Я обнаружил, что результат сортировки в ASCII:

test исходного файла:

1-
11-
1-a
11-a

Сортировка с использованием ASCII:

$ LANG=en_US.ascii sort test
1-
1-a
11-
11-a

И используя UTF-8:

$ LANG=en_US.utf8 sort test
1-
11-
11-a
1-a

Я чувствую, что это так нелогично, и это не порядок словаря.

Разве символ '-' (002d) не всегда меньше [0-9] (0030-0039)? Каково общее правило в сопоставлении UTF-8?

И как это обойти, просто сделать - быть меньше [0-9] , оставив другие символы неизменными для UTF-8 в Linux? (Это может повлиять на результат ls --sort , sort и т.д.)

2 ответа2

6

Знак минус игнорируется при первом проходе. Итак, первый проход сортирует 1 , 11 , 1a , 11a . Так как 1 < a , вы получите 11a < 1a и, следовательно, 11-a < 1-a .

- переменный элемент сопоставления, означающий, что вы / разработчик можете игнорировать его. Реализация glibc, очевидно, делает это. На практике это пунктуация влияет на большинство знаков препинания.

Вы можете прочитать подробную информацию в Unicode Collation Algorithm, по модулю, как glibc реализует его.

0

Как объяснил Питер Эйзентро, это потому, что алгоритм сортировки для Unicode игнорирует - при сортировке.

Единственный способ обойти это - определить свой собственный языковой стандарт с другими параметрами сортировки (правила сортировки). Это, однако, довольно нетривиально. Кроме того, это даст вам систему с необычными правилами сортировки, которые могут вызвать проблемы с другим программным обеспечением.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .