[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