How to test locale in C? All my tests fail.
Massimo Fusaro
mcfusaro at gmail.com
Thu May 24 11:11:29 UTC 2007
From the setlocale(3) manual page:
... A locale argument of NULL causes setlocale() to return the
current locale. ...
--
-max
2007/5/24, Artem Kuchin <matrix at itlegion.ru>:
> 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
>
> _______________________________________________
> freebsd-stable at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-stable
> To unsubscribe, send any mail to "freebsd-stable-unsubscribe at freebsd.org"
>
More information about the freebsd-stable
mailing list