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