[Homeros] Voiceman. Определение кодировки
Michael Pozhidaev
msp на altlinux.ru
Пн Май 10 08:17:37 UTC 2010
Hello, Дмитрий Падучих!
> Привет всем!
>
> Как я понимаю, Voiceman определяет кодировку локали на основании
> переменной $LANG. Но это не вполне верный способ. $LC_CTYPE и $LC_ALL
> имеют приоритет перед $LANG. К тому же в имени локали может не быть
> кодировки. Более надёжный (и простой) способ:
Если там нет кодировки, то берём US_ASCII, как, например, делается в
случаях запуска сервера от рута.
>
> setlocale(LC_CTYPE, "");
Тогда уж LC_ALL, а не LC_CTYPE?
> char *encoding = nl_langinfo(CODESET);
Ну можно и так.
> Ещё, по-моему, полагаться на то, что представление wchar_t совпадает с
> utf32le, не слишком надёжно. По крайней мере в libiconv для этого есть
> специальная кодировка - wchar_t. Возможно, лучше использовать её.
Как быть увереным, что wchar_t окажется utf32le или его алиасом? Даже
если она будет utf32be, это, очевидно, сломает использование строковых констант в
исходниках. Тут вопрос в том, что окажется вероятней, тип wchar_t будет
иметь длину отличную от четырёх байт, или кодировка wchar_t окажется не
utf32le.
--
Michael Pozhidaev. Tomsk, Russia. E-mail: msp на altlinux.ru
Russian info page: http://www.marigostra.ru/
Подробная информация о списке рассылки Homeros