In UTF-8-Kollatierung ist 11- dann weniger als 1?

7

Ich fand, dass das Sortierergebnis in ASCII:

Quelldatei test:

1-
11-
1-a
11-a

Nach ASCII sortieren:

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

Und mit UTF-8:

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

Ich finde, es ist so kontrapunktisch und es ist keine Reihenfolge der Wörterbücher.

Ist der Charakter nicht "-" ( 002d ) ist dann immer weniger [0-9] ( 0030-0039 ) Was ist die allgemeine Regel in der UTF-8-Kollatierung?

Und wie man das umgehen kann, einfach machen - dann weniger sein [0-9] während andere Zeichen für UTF-8 unter Linux unverändert bleiben? (So ​​kann es das Ergebnis beeinflussen ls --sort. sort, usw. )

Xiè Jìléi
quelle
3
Wo genau sehen Sie das? Mit sort 8.5 von GNU coreutils, "1-" steht immer vor "11-", mit einem beliebigen Gebietsschema.
grawity
Es ist mein Fehler. Ich habe die Saiten abgeschnitten. Ich habe das Beispiel geändert. Bitte versuchen Sie es erneut.
Xiè Jìléi
@ grawity Ich sehe dies auf Google Mail, wenn ich Zip-Dateien öffne. Ich sehe das in Win7 mit Bildern: 11, 12, 13, ..., 19, 1.
Wolfpack'08

Antworten:

6

Das Minuszeichen wird im ersten Durchgang ignoriert. Der erste Durchgang sortiert also 1. 11. 1a. 11a. Schon seit 1 & lt; a, du kriegst 11a & lt; 1a und somit 11-a & lt; 1-a.

- ist ein variables Sortierelement bedeutet, dass Sie / der Implementierer es ignorieren können. Die glibc-Implementierung tut dies anscheinend. In der Praxis ist die meiste Interpunktion von diesem Verhalten betroffen.

Sie können sich über die blutigen Details in der Unicode-Sortierungsalgorithmus , modulo wie glibc es implementiert.

Peter Eisentraut
quelle
Gibt es dann eine Konfiguration, um diese Unwissenheit zu unterdrücken?
Xiè Jìléi
Nicht dass ich wüsste.
Peter Eisentraut
0

Wie Peter Eisentraut erklärt hat, liegt dies daran, dass der Sortieralgorithmus für Unicode ignoriert wird - beim Sortieren

Der einzige Weg, dies zu umgehen, besteht darin, ein eigenes Gebietsschema mit einer anderen Sortierung (Sortierregeln) zu definieren. Dies ist jedoch nicht trivial. Außerdem erhalten Sie ein System mit ungewöhnlichen Sortierregeln, das Probleme mit anderer Software verursachen kann.

Realistisch gesehen müssen Sie entweder Ihr Gebietsschema auf ASCII umstellen (wenn Sie kein Unicode-Zeichen benötigen) oder mithilfe eines Programms sortieren, in dem Sie die Sortierregeln direkt konfigurieren können.

sleske
quelle