[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: strcoll, C, ru_RU.KOI8-R



Vladimir Zolotykh -> debian-russian@lists.debian.org  @ Thu, 01 Dec 2005 10:44:36 +0200:

 VZ> Где можно задать "чисто" программистский вопрос?
 VZ> Вопрос специфический по поводу strcoll и как она себя ведет в локалях
 VZ> С и ru_RU.KOI8-R

 VZ> Если debian-russian точно не эта группа просто не читай дальше.

 VZ> такая вот простая функция

 VZ> main(int argc, char * argv [])
 VZ> {
 VZ>     if (argc > 1)
 VZ>     setlocale(LC_COLLATE, "ru_RU.KOI8-R");
 VZ>     else
 VZ>     setlocale(LC_COLLATE, "C");
 VZ>     printf("%d\n", strcoll("a-name", "aname"));
 VZ> }

 VZ> печатает -65 если вызвана без аргументов и 1 если с ними
 VZ> Сколько ни думал, никакого разумного объяснения не придумал.

Ну а чего тут удивительного?  В локали "C" AKA "порядок строго по коду
символа" минус (код 45) сортируется до n (код 110), а в человеческом языке
знаки препинания имеют все шансы следовать за буквами алфавита.  Кстати,
подозреваю, не только в русском.  Собери локаль en_US.ISO-8859-1 и
попробуй с ней.  С шансами получишь то же самое.

-- 
Artem Chuprina
RFC2822: <ran{}ran.pp.ru> Jabber: ran@jabber.ran.pp.ru

А рафинированных эстетов на праздник жизни не приглашали.
	Ольга Брилева в <bcthqq$29$3828@www.fido-online.com>



Reply to: