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

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



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=-