Ncurses проблема с русскими буквами

Тема в разделе "WASM.UNIX", создана пользователем rdtsc, 2 апр 2009.

  1. rdtsc

    rdtsc Параллелепипедов Артем

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    180
    Адрес:
    Москва
    1)Линукс, локаль ru-UTF8
    2) в начале программы нкёрсес стоит setlocale(LC_ALL,"")

    Вывод printw("по русски") - печатается кракозябовски..

    Как подружить ncurses и русские буквы?
     
  2. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    проверь шрифт в xterm :)
     
  3. rdtsc

    rdtsc Параллелепипедов Артем

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    180
    Адрес:
    Москва
    как это сделать?
    система Debian, по русски сам писать могу в теримнале.
     
  4. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    Ну если ты в этом же окне видишь русский, то дело не в шрифте....

    В исходнике у тебя UTF-8 кодировка?
     
  5. rdtsc

    rdtsc Параллелепипедов Артем

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    180
    Адрес:
    Москва
    Как ее поставить - setlocale(LC_ALL."ru_RU.UTF-8") ?
    Вообще никак в локализации..
    На саом деле русские буквы которые он пытается вывести - это имена файлов полученые в-ие винды FindFirst/NextFile..
    Т.е. 1 байт на символ..Вроде это Анси(аски), или кои?


    Вообще этот ncurses глючная вещь.
    Например у меня есть типа файл мэнеджера на нем.
    Вывожу список файлов из директории програм файлз - там их много не помещаются на экране, показвается то что помещается, листать можно. Все работает отлично.
    НО - пробую выводить список из директории виндовс - выводит 1е 2-3 строчки, или вобщем какоето число строк, и сегфалт в нкёрсес в ф-ии обновлении экрана или же в wgetch()
    Поислледовал - вроде там падает на доступе по нулевому указателю SP - это я так понимаю ScreenPointer..
    но почему то падает тока на выводе c:\windows ...Мистика да и только.
    Я уже стал думать что ему не нравятся файлы с именем $NtUninstall чтото такое..с баксом вобщем...
     
  6. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    Значит это какая-то кодировка win1251/koi/??? Тебе надо получать имена в Unicode/16 или UTF8 и потом отдавать их в либу. Узнай что именно хочет либа и конвертируй.

    Кста, если имена не доступны в unicode, то придётся конвертировать в unicode самому используя code page. То есть, ты "забиваешь" win1251 и след-но потом это глючнет с китайским.

    Откуда filenames?
     
  7. rdtsc

    rdtsc Параллелепипедов Артем

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    180
    Адрес:
    Москва
    имена с виндовс машины.
    Кодировка там ISO-8859 (точно не помню), вобщем ее не переводит в руский,иконв тоже не может ее перевести ни в ютф,ни во что другое..сетлокале на ISO не помагает.
    Кароче решил руские буквы транслитом выводить.
    А может вообще от нкёрсес откажусь..Прочитал тут про какойто PellesC расширенеие,там есть ф-ии работы с крусором..собсно мне больше то и не надо
     
  8. rdtsc

    rdtsc Параллелепипедов Артем

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    180
    Адрес:
    Москва
    Отказался от ncyrses, сделал файл-манагер обычными stdio ф-иями..все клево работает. Функциоанль клавиши легко обычным getchar() берется - просто надо 3 раза вызывать гетчар если 1й символ равен 1b (или 5bh не помню щас).
     
  9. Mecid

    Mecid New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2009
    Сообщения:
    27
    дашь затянуть?
     
  10. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    не надо в сорце использовать не 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 -- это прошлый век :)
     
  11. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    rdtsc
    Дай исходники пжайлуста.
     
  12. rdtsc

    rdtsc Параллелепипедов Артем

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    180
    Адрес:
    Москва
    исходники? зачем? это т.н. "манагер" (еще 10 кавычек)- под одну цель, вы не сможете его использовать просто так, для файлов локальной машины...написан - чтобы поскорее посмореть файлы удаленной машины и все (отсылает команды для шел скрипта, который пересылает их на фтп сервер, с которым взаимодействует код на удаленной машине)...такой вот говеный ссш)