В utf-8 сопоставлении, почему 11-менее затем 1-?

Я нашел, что вид приводит к 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, и т.д.)

7
задан 30.10.2012, 09:56

2 ответа

Знак "минус" проигнорирован в первичной обработке. Так виды первичной обработки 1, 11, 1a, 11a. С тех пор 1 < a, Вы добираетесь 11a < 1a и таким образом 11-a < 1-a.

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

Можно читать в окровавленных деталях в Алгоритме сопоставления Unicode, по модулю как glibc реализует его.

6
ответ дан 07.12.2019, 15:05

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

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

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

0
ответ дан 07.12.2019, 15:05

Теги

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