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

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: