Victor Wagner wrote:
Vladimir Zolotykh <[EMAIL PROTECTED]> wrote: : Где можно задать "чисто" программистский вопрос? : Вопрос специфический по поводу strcoll и как она себя ведет в локалях : С и ru_RU.KOI8-R : Если debian-russian точно не эта группа просто не читай дальше. : такая вот простая функция : main(int argc, char * argv []) : { : if (argc > 1) : setlocale(LC_COLLATE, "ru_RU.KOI8-R"); : else : setlocale(LC_COLLATE, "C"); : printf("%d\n", strcoll("a-name", "aname")); : } : печатает -65 если вызвана без аргументов и 1 если с ними : Сколько ни думал, никакого разумного объяснения не придумал. : Все из Sarge.В локали C небуквенные символы при сравнении учитываются, а в ru_RU - нет. Кстати, рекомендую попробовать еще и в en_US локали. Эффект будет тот же, что и в ru_RU Все национальные локали базируются на iso14651_t1, в которой про - написано: <U002D> IGNORE;IGNORE;IGNORE;<U002D> # 37 -
Более или менее начинаю понимать, хотя не скажу чтобы по содержимому iso14651_t1 можно было сразу понять что к чему. Вот например строчки, как их понимать? <U0041> <a>;<BAS>;<CAP>;IGNORE # 319 A ........ <U0042> <b>;<BAS>;<CAP>;IGNORE # 330 B Как на основании этих двух строк видно, что ``a'' должен предшествовать ``b''? Другими словами, какой формат этих сток ?
А C тупо сортирует по ASCII кодам. Поэтому в русской (и английской) локали файлы A a B b отсортируются именно в таком порядке, а в C - A B a b
-- Vladimir Zolotykh

