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/ -- To UNSUBSCRIBE, email to [email protected] with a subject of "unsubscribe". Trouble? Contact [email protected]

