Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 24 May 2007 14:24:32 +0400
From:      "Artem Kuchin" <matrix@itlegion.ru>
To:        <freebsd-stable@freebsd.org>
Subject:   How to test locale in C? All my tests fail.
Message-ID:  <023401c79ded$ba3b7fe0$05000100@Artem>

next in thread | raw e-mail | index | archive | help
Maybe it is the wrong list, but maybe  someone can quickly
help me out.

I have a very stupid problem. I cannot convert to upper
or lower case using manually set locale (setlocale(..)).

A very simple program:
 #include <locale.h>
 #include <errno.h>
     #include <ctype.h>

main(){

    char *b=setlocale(LC_CTYPE, "ru_RU.CP1251");
    if (!b){
        printf("FAILED! %d\n",errno);
    }
    else {
        printf("OK: %s %d\n",b,errno);
        printf("IS UPPER Ê: %d\n",isupper('Ê'));
        printf("IS UPPER ê: %d\n",isupper('ê'));
        printf("IS LOWER Ê: %d\n",islower('Ê'));
        printf("IS LOWER ê: %d\n",islower('ê'));
        printf("LOCALE %s\n",setlocale(LC_CTYPE,NULL));
        printf("1: TO UPPER %c TO LOWER %c\n",toupper('Ö'),tolower('ö'));
        printf("1-0: TO UPPER %c TO LOWER %c\n",toupper('ñ'),tolower('Ñ'));
        printf("2: TO UPPER %c TO LOWER %c\n",toupper('r'),tolower('R'));
    }
}

Output is always:

OK: ru_RU.CP1251 0
IS UPPER Ê: 0
IS UPPER ê: 0
IS LOWER Ê: 0
IS LOWER ê: 0
LOCALE ru_RU.CP1251
1: TO UPPER Ö TO LOWER ö
1-0: TO UPPER ñ TO LOWER Ñ
2: TO UPPER R TO LOWER r

Ê,Ö,Ñ - is lower case leters and
ê,ö,ñ - is upper case

As you see, it simply does not work at all.
It seems like the locale is "C" but as you see
setlocale returned ru_RU.CP1251

tested on 6.2, 5.4 and 4.10 - all the same.
What am i doing wrong?
(except posting in the wrong list ;)



--
Regards,
Artem 




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?023401c79ded$ba3b7fe0$05000100>