1)Линукс, локаль ru-UTF8 2) в начале программы нкёрсес стоит setlocale(LC_ALL,"") Вывод printw("по русски") - печатается кракозябовски.. Как подружить ncurses и русские буквы?
Ну если ты в этом же окне видишь русский, то дело не в шрифте.... В исходнике у тебя UTF-8 кодировка?
Как ее поставить - setlocale(LC_ALL."ru_RU.UTF-8") ? Вообще никак в локализации.. На саом деле русские буквы которые он пытается вывести - это имена файлов полученые в-ие винды FindFirst/NextFile.. Т.е. 1 байт на символ..Вроде это Анси(аски), или кои? Вообще этот ncurses глючная вещь. Например у меня есть типа файл мэнеджера на нем. Вывожу список файлов из директории програм файлз - там их много не помещаются на экране, показвается то что помещается, листать можно. Все работает отлично. НО - пробую выводить список из директории виндовс - выводит 1е 2-3 строчки, или вобщем какоето число строк, и сегфалт в нкёрсес в ф-ии обновлении экрана или же в wgetch() Поислледовал - вроде там падает на доступе по нулевому указателю SP - это я так понимаю ScreenPointer.. но почему то падает тока на выводе c:\windows ...Мистика да и только. Я уже стал думать что ему не нравятся файлы с именем $NtUninstall чтото такое..с баксом вобщем...
Значит это какая-то кодировка win1251/koi/??? Тебе надо получать имена в Unicode/16 или UTF8 и потом отдавать их в либу. Узнай что именно хочет либа и конвертируй. Кста, если имена не доступны в unicode, то придётся конвертировать в unicode самому используя code page. То есть, ты "забиваешь" win1251 и след-но потом это глючнет с китайским. Откуда filenames?
имена с виндовс машины. Кодировка там ISO-8859 (точно не помню), вобщем ее не переводит в руский,иконв тоже не может ее перевести ни в ютф,ни во что другое..сетлокале на ISO не помагает. Кароче решил руские буквы транслитом выводить. А может вообще от нкёрсес откажусь..Прочитал тут про какойто PellesC расширенеие,там есть ф-ии работы с крусором..собсно мне больше то и не надо
Отказался от ncyrses, сделал файл-манагер обычными stdio ф-иями..все клево работает. Функциоанль клавиши легко обычным getchar() берется - просто надо 3 раза вызывать гетчар если 1й символ равен 1b (или 5bh не помню щас).
не надо в сорце использовать не 7-bit аски символы. реализация wchar_t не указывает какую кодировку должна использовать реализация для хранения симоволов. (но всяко multibyte кодировку, типа utf-8 ). glibc, если я правильно помню использует utf16BE... Возьми iconv, и перекодируй все сорцы в WCHAR_T (у iconv есть такая кодировка). Или во время выполнения программы кодируй все строки из utf-8 в wchar_t. А вообще, wchar_t как-то не очень дружит с современными системами. ru_RU.UTF8... gettext с utf8 работает... Короче ncurses, с его printw -- это прошлый век
исходники? зачем? это т.н. "манагер" (еще 10 кавычек)- под одну цель, вы не сможете его использовать просто так, для файлов локальной машины...написан - чтобы поскорее посмореть файлы удаленной машины и все (отсылает команды для шел скрипта, который пересылает их на фтп сервер, с которым взаимодействует код на удаленной машине)...такой вот говеный ссш)