Re: Определение локали, в которой запущено приложение
On 2009.12.11 at 16:35:48 +0300, Alexey Pechnikov wrote:
> Hello!
>
> Вроде как идеологически правильной является функция nl_langinfo(CODESET).
> Но приложение, запущенное напрямую, возвращает UTF-8, а вызванное из
> скрипта (#!/bin/sh интерпретатор) - ANSI_X3.4-1968. Я про такую и не слышал.
Это значит us-ascii и соответствует локалям C и POSIX.
То есть либо кто-то почистил переменные среды, либо
забыл позвать setlocale(LC_CTYPE,"")
> Опять же, есть переменные окружения LC_ALL, LC_CTYPE и LANG - в таком ли
> порядке надо их проверять и как это согласуется с результатом nl_langinfo?
nl_langinfo возвращает кодировку, соответсвующую текущей локали,
инициализированной в данном процессе.
Инициализируется локаль вызовом setlocale(категория,строка)
Если указана пустая строка, то используется значение из переменных
окружения перечисленных выше. Причем, если указана категория LC_CTYPE
то переменные проверяются функцией setlocale именно в том порядке, в каком они
процитированы.
Соответсвенно, если хочешь в приложении использовать nl_langinfo, надо
обязательно не забыть позвать setlocale. Причем с теми категорями,
которым соответсвует запрашиваемый параметр функции nl_langinfo. В ее
man это по-моему написано, для чего какая категория нужна.
> Best regards, Alexey Pechnikov.
> http://pechnikov.tel/
Reply to: