- Liittynyt
- 17.10.2016
- Viestejä
- 2 436
Tuli nyt ajankohtaiseksi ihmetellä tarkemmin linuxin tiedostojen sorttauksen ihmeellisyyttä. Huomasin, että Ääkköset sortataan mun mint asennuksessa kuin ne olisi Aakkosia. Pitkän googlailun jälkeen tuli turhautumista.
Olin aiemmin vain gui:n puolelta vaihtanut locale-asetuksia, eli suomea region ja timeformattiin ja usaenkkua kieleen.
Syypää ääkkösten sorttaukseen oli siis
Onko
Eksyin googlatessa lukemaan githubiin mintin tiedostohallintasoftan, Nemon sorttausvalituksia ja jos käsitin oikein, niin perusongelma on lähtöisin glib-projektista ja kuulemma ei kannata odotella, että he korjaisivat tilannetta mitenkään ("it was written as documented, the end." tjsp.). Jotkut ovat tehneet omia localeita jossa ovat fiksanneet jotain sorttausjuttuja, jotkut käyttävät jotain hackia korjaamaan, ja joku fiksaa suoraan nemon koodia ja kääntää sen itse omalle koneelle.
Mitä nyt lukenut ja testannut vähän itse niin sopivaa sorttaussysteemiä ei tahdo saada.
Näissä on onneksi se, että isot ja pienet kirjaimet eivät vaikuta järjestykseen mutta tosiaan erikoismerkit ei vaikuta, esim. huutomerkillä alkava sortataan sen mukaan mikä siinä tiedostonimessä on seuraava alfanumeerinen merkki. Paras IMO olisi, että sorttaus olisi näin:
Windowsissa command prompti (tai powershell) noin sen näyttää, mutta omaksi yllätyksekseni, gui:n puolella file manager ei, se näyttää kuten linuksissa.
Sitten jos kokeilee
Lisäksi erikoismerkit ei ihan ole mukavassa sorttausjärjestyksessä tuossa.
Ja kaiken päälle esim. Nemossa on omat hardkoodaukset lisäksi; numerot tulee ekaksi ja pisteellä alkavat loppuun.
Paras sorttausjärjestys olisi IMO "erikoismerkit - numerot - aakkoset (case insensitive)". Käsittääkseni windowsissa sorttaus on tuollainen. Saisiko linuksiin tuollaista?
Olin aiemmin vain gui:n puolelta vaihtanut locale-asetuksia, eli suomea region ja timeformattiin ja usaenkkua kieleen.
locale
-komento näytti tältä:
Koodi:
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=fi_FI.UTF-8
LC_TIME=fi_FI.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=fi_FI.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=fi_FI.UTF-8
LC_NAME=fi_FI.UTF-8
LC_ADDRESS=fi_FI.UTF-8
LC_TELEPHONE=fi_FI.UTF-8
LC_MEASUREMENT=fi_FI.UTF-8
LC_IDENTIFICATION=fi_FI.UTF-8
LC_ALL=
Syypää ääkkösten sorttaukseen oli siis
LC_COLLATE
jonka muutin fi_FI.UTF-8
.Onko
LC_CTYPE
:llä mitään merkitystä, että onko se en_US.UTF-8
tai fi_FI.UTF-8
? Ja kannattaako se olla vaan sama kuin LANG
?Eksyin googlatessa lukemaan githubiin mintin tiedostohallintasoftan, Nemon sorttausvalituksia ja jos käsitin oikein, niin perusongelma on lähtöisin glib-projektista ja kuulemma ei kannata odotella, että he korjaisivat tilannetta mitenkään ("it was written as documented, the end." tjsp.). Jotkut ovat tehneet omia localeita jossa ovat fiksanneet jotain sorttausjuttuja, jotkut käyttävät jotain hackia korjaamaan, ja joku fiksaa suoraan nemon koodia ja kääntää sen itse omalle koneelle.
Mitä nyt lukenut ja testannut vähän itse niin sopivaa sorttaussysteemiä ei tahdo saada.
en_US.UTF-8
tai fi_FI.UTF-8
käyttäessä näyttäisi siltä, että sorttauksessa merkitsee vain alfanumeeriset merkit, vähän väliä onko tiedostonimissä välejä tai erikoismerkkejä. Esim.:
Koodi:
S-kaupat
soidinmenot
S-Pankki
Koodi:
S-kaupat
S-Pankki
soidinmenot
Sitten jos kokeilee
LC_COLLATE=C
asetusta niin sorttaus näyttäisi tapahtuvan ASCII-merkistön järjestyksessä, mistä aiheutuu IMO suuri ongelma siitä, että isot kirjaimet tulevat aina ennen pieniä kirjaimia sorttauksessa. Esim. (katso miten iso "M" on ennen kuin pienellä olevat "a":t alkavat:
Koodi:
! A
%
&
( A
.
..
.A
.a
.aaa
1
9
A
A Aaa
Aaa
M
[ A
a
aa
{ A
Äää
ä
Ja kaiken päälle esim. Nemossa on omat hardkoodaukset lisäksi; numerot tulee ekaksi ja pisteellä alkavat loppuun.
Paras sorttausjärjestys olisi IMO "erikoismerkit - numerot - aakkoset (case insensitive)". Käsittääkseni windowsissa sorttaus on tuollainen. Saisiko linuksiin tuollaista?