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

Re: Fw: К вопросу об alias'ах



Alexander Voropay wrote:

> Hi!
>
> >Теперь, как я уже писал, в новой версии Qt (это основа KDE) кодировка
> >определяется очень хитрым способом. KOI8-R можно получить _только_
> >указав это явно в LANG или LC_CTYPE. Когда у автора стали спрашивать -
> >почему он так поступил, тот ответил, что его  _алгоритм_ соответствует
> >_файлу_  locale.alias. То есть он перенес файл настройки - в тексты
> >пакета! И хоть кол на голове теши.
>
>  Есть достаточно переносимая фиункция nl_langinfo. К сожалению,
> это не POSIX, но она входит в XPG, SVID, Unix98. К сожалению,
> автор glibc опять отличился : хотя glibc пытается быть XPG compliant,
> keyword LC_CTYPE codeset в glibc *не определен*.
>
>  А авторам Qt надо срочно передать такую програмку :
> ===========================
> /* Query 'CODESET' keyword, defined in current LC_CTYPE */
> #include <stdio.h>
> #include <locale.h>
> #include <langinfo.h>
>
> main ()
> {
> char * codeset;
> setlocale(LC_ALL,"");
>
> /* ... */
>
> #if defined (__GNUC__)
> /********************************************
>   Unfortunatelly, GNU libc not XPG compliant
> *********************************************/
>  codeset=nl_langinfo(_NL_CTYPE_CODESET_NAME);
> #else
>  codeset=nl_langinfo(CODESET);
> #endif
>
> /* ... */
> printf ("LC_CTYPE = %s\n", setlocale(LC_CTYPE, NULL));
> printf ("LC_CTYPE Codeset = %s\n",codeset);
>
> }
> ================================
>
>  Работает невзирая на locale.alias !
>
> $ cc -o codeset codeset.c
> $ ./codeset
> LC_CTYPE = C
> LC_CTYPE Codeset = ISO_646.IRV:1983
> $ export LANG=ru_RU
> $ ./codeset
> LC_CTYPE = ru_RU
> LC_CTYPE Codeset = ISO-8859-5
> $ export LANG=ru_SU
> $ ./codeset
> LC_CTYPE = ru_SU
> LC_CTYPE Codeset = KOI8-R
> $
>
> --
> -=AV=-

Блеск!