LINUX.ORG.RU

Некорректная сортировка в Ubuntu (linux), это баг или фича?


0

0

решил спросить еще и тут
столкнулся при попытке использовать postgresql, который использует сортировку из системы почему оно ставит пробелы после цифр???

Ubuntu 8.04.2
locale
LANG=ru_RU.UTF8
LC_CTYPE=«ru_RU.UTF8»
LC_NUMERIC=«ru_RU.UTF8»
LC_TIME=«ru_RU.UTF8»
LC_COLLATE=«ru_RU.UTF8»
LC_MONETARY=«ru_RU.UTF8»
LC_MESSAGES=«ru_RU.UTF8»
LC_PAPER=«ru_RU.UTF8»
LC_NAME=«ru_RU.UTF8»
LC_ADDRESS=«ru_RU.UTF8»
LC_TELEPHONE=«ru_RU.UTF8»
LC_MEASUREMENT=«ru_RU.UTF8»
LC_IDENTIFICATION=«ru_RU.UTF8»
LC_ALL=



Тест:

touch 'а'
touch 'я'
touch 'ё'
touch 'а a'
touch 'я a'
touch 'ё a'
touch 'а1'
touch 'я1'
touch 'ё1'
touch '0'
touch '1'
touch '10'
touch '15'
touch ' '
touch '20'
touch '20 Руб'
touch '10 Руб'
touch '1 Руб'
touch '1 '
touch '2 Руб'
touch '12 Руб'
ls -l

-rw-r--r-- 1 oracle oinstall 0 2010-02-03 14:44 0
-rw-r--r-- 1 oracle oinstall 0 2010-02-03 14:44 1
-rw-r--r-- 1 oracle oinstall 0 2010-02-03 14:44 1
-rw-r--r-- 1 oracle oinstall 0 2010-02-03 14:44 10
-rw-r--r-- 1 oracle oinstall 0 2010-02-03 14:44 10 Руб
-rw-r--r-- 1 oracle oinstall 0 2010-02-03 14:52 12 Руб
-rw-r--r-- 1 oracle oinstall 0 2010-02-03 14:44 15
-rw-r--r-- 1 oracle oinstall 0 2010-02-03 14:44 1 Руб
-rw-r--r-- 1 oracle oinstall 0 2010-02-03 14:44 20
-rw-r--r-- 1 oracle oinstall 0 2010-02-03 14:44 20 Руб
-rw-r--r-- 1 oracle oinstall 0 2010-02-03 14:44 2 Руб
-rw-r--r-- 1 oracle oinstall 0 2010-02-03 14:44 а
-rw-r--r-- 1 oracle oinstall 0 2010-02-03 14:44 а1
-rw-r--r-- 1 oracle oinstall 0 2010-02-03 14:44 а a
-rw-r--r-- 1 oracle oinstall 0 2010-02-03 14:44 ё
-rw-r--r-- 1 oracle oinstall 0 2010-02-03 14:44 ё1
-rw-r--r-- 1 oracle oinstall 0 2010-02-03 14:44 ё a
-rw-r--r-- 1 oracle oinstall 0 2010-02-03 14:44 я
-rw-r--r-- 1 oracle oinstall 0 2010-02-03 14:44 я1
-rw-r--r-- 1 oracle oinstall 0 2010-02-03 14:44 я a

я тестировал на freebsd KOI8, на windows, и вот ссейчас на opensolaris 09.06 с той же локалью, все как и должно быть
LANG=ru_RU.UTF-8

rdima@osolit:~/test$ ls -l
total 11
-rw-r--r-- 1 rdima staff 0 2010-02-08 10:27
-rw-r--r-- 1 rdima staff 0 2010-02-08 10:27 0
-rw-r--r-- 1 rdima staff 0 2010-02-08 10:27 1
-rw-r--r-- 1 rdima staff 0 2010-02-08 10:27 1
-rw-r--r-- 1 rdima staff 0 2010-02-08 10:27 1 Руб
-rw-r--r-- 1 rdima staff 0 2010-02-08 10:27 10
-rw-r--r-- 1 rdima staff 0 2010-02-08 10:27 10 Руб
-rw-r--r-- 1 rdima staff 0 2010-02-08 10:27 12 Руб
-rw-r--r-- 1 rdima staff 0 2010-02-08 10:27 15
-rw-r--r-- 1 rdima staff 0 2010-02-08 10:27 2 Руб
-rw-r--r-- 1 rdima staff 0 2010-02-08 10:27 20
-rw-r--r-- 1 rdima staff 0 2010-02-08 10:27 20 Руб
-rw-r--r-- 1 rdima staff 0 2010-02-08 10:27 а
-rw-r--r-- 1 rdima staff 0 2010-02-08 10:27 а a
-rw-r--r-- 1 rdima staff 0 2010-02-08 10:27 а1
-rw-r--r-- 1 rdima staff 0 2010-02-08 10:27 ё
-rw-r--r-- 1 rdima staff 0 2010-02-08 10:27 ё a
-rw-r--r-- 1 rdima staff 0 2010-02-08 10:27 ё1
-rw-r--r-- 1 rdima staff 0 2010-02-08 10:27 я
-rw-r--r-- 1 rdima staff 0 2010-02-08 10:27 я a
-rw-r--r-- 1 rdima staff 0 2010-02-08 10:27 я1

locale
LANG=ru_RU.UTF-8
LC_CTYPE=«ru_RU.UTF-8»
LC_NUMERIC=«ru_RU.UTF-8»
LC_TIME=«ru_RU.UTF-8»
LC_COLLATE=«ru_RU.UTF-8»
LC_MONETARY=«ru_RU.UTF-8»
LC_MESSAGES=«ru_RU.UTF-8»
LC_ALL=


а в Ubuntu (наверно и в других линуксах) не очень приятная ситуация, разъясните пожалуйста или ткните носом куда копать.

Ответ на: комментарий от fluorite

Ну и чего умничать? я и сам знаю для чего LC_COLLATE
мне utf8 надо
но даже LC_COLLATE=ru_RU.CP1251 не дает никакого эффекта
еще раз, на windows 1251 все правильно, на opensolaris и при utf8 правильно
в какой из консерваторий линукса проблема?

grafsoft
() автор топика

Я тоже сталкивался с такой проблемой, что пробелы/подчеркивания в имени файлов нарушают сортировку. Помню, что решить не смог, а красноглазы с пеной у рта доказывали, что такая сортировка самая правильная. Поиск по лору показал, что тему эту удалили.

xintrea
()

Если считаешь, то такая сортировка не является правильной - пиши багрепорт разработчикам glibc.

Deleted
()
Ответ на: комментарий от xintrea

LC_COLLATE=«C» вроде выводит как надо ТСу, за исключением ё.
Ну и всегда можно наваять свою собственную локаль, с бд. и ш.

fluorite ★★★★★
()

самый фокус что оракул если к нему подключится с с венды сортирует правильно, а если с линукса с вендовой локалью - по линупсятски.

wfrr ★★☆
()
Ответ на: комментарий от Deleted

Да эта сортировка неправильная, я нашел пару багрепортов датируемых еще 2006,2008 гг.

например тут есть немного информации
https://bugzilla.novell.com/show_bug.cgi?id=152778#c4

я так понял, смысл в том, что сортировка в linux базируется на каком то стандарте хитром стандарте iso14651, и баг взят оттуда,

а тут пишут, что тяжело протолкнуть, т.к. мало обращения по этому поводу
http://www.mail-archive.com/linux-utf8@nl.linux.org/msg05252.html

но это же явный баг.

завтра поковыряюсь, сделать свой collate

grafsoft
() автор топика
Ответ на: комментарий от wfrr

А вот оракл, как раз ВСЕГДА сортирует «правильно», т.е. так как ему скажеш, у него свои locale определения,
man $ORACLE_HOME/nls/data, lbuilder

grafsoft
() автор топика
Ответ на: комментарий от fluorite

«LC_COLLATE=„C“ вроде выводит как надо ТСу, за исключением ё.
Ну и всегда можно наваять свою собственную локаль, с бд. и ш.»

Вот именно, да и русским языком, не все ограничивается и «C» не катит, зачем потенциальные траблы

grafsoft
() автор топика
Ответ на: комментарий от grafsoft

у меня thin клиент, так чо сей способ не пойдет

wfrr ★★☆
()

Судя по всему авторам этого стандарта (ISO 14651) взападло было озадачиваться сортировками, ну и тем кто эти занимается в линуксе тоже, соответственно такая лажа и получается.

grafsoft
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.