The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"ncurses и русские символы"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"ncurses и русские символы"  
Сообщение от Igor1975 (ok) on 31-Май-06, 18:26 
Помогите разобраться с ncurses. При выводе сообщений с русским буквами, часть сообщения не читается. Как с этим бороться?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "ncurses и русские символы"  
Сообщение от chip email(ok) on 31-Май-06, 22:03 
>Помогите разобраться с ncurses. При выводе сообщений с русским буквами, часть сообщения
>не читается. Как с этим бороться?

Попробуй порыться в:
locale
tput longname


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "ncurses и русские символы"  
Сообщение от Igor1975 (ok) on 01-Июн-06, 10:13 
>Попробуй порыться в:
>locale
>tput longname

locale выдает все ru_RU.UTF-8
пробовал менять на KOI-8, не помогает.
tput longname
xterm terminal emulator (X Window System)

при этом printf выводит русские буквы нормально.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "ncurses и русские символы"  
Сообщение от chip email(ok) on 01-Июн-06, 17:01 
>>Попробуй порыться в:
>>locale
>>tput longname
>
>locale выдает все ru_RU.UTF-8

собственно, ИМХО, всё очевидно - ncurses собрана без поддержки utf8.

>пробовал менять на KOI-8, не помогает.

НЕ ВЕРЮ! (С) хз.

Если запустить xterm следующим образом:
LANG=ru_RU.KOI8-R xterm -fn "-misc-fixed-medium-r-normal--15-140-75-75-c-90-koi8-r"

и далее выполнить Вашу программу 100% должно всё работать. Разумеется charset программы должен быть тоже koi8-r.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

12. "ncurses и русские символы"  
Сообщение от chip email(ok) on 01-Июн-06, 17:05 

>собственно, ИМХО, всё очевидно - ncurses собрана без поддержки utf8.

Более того, ubuntu breezy 5.10 - libncurses5 5.4-9ubuntu4:
собрана без поддержки utf8. Абсолютно аналогичные грабли.

ps: варианты workaround 2:
1. собрать ncurses с utf8
2. использовать проверенный временем ru_RU.KOI8-R

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

15. "ncurses и русские символы"  
Сообщение от Igor1975 (ok) on 01-Июн-06, 19:50 
>Если запустить xterm следующим образом:
>LANG=ru_RU.KOI8-R xterm -fn "-misc-fixed-medium-r-normal--15-140-75-75-c-90-koi8-r"
>
>и далее выполнить Вашу программу 100% должно всё работать. Разумеется charset программы
>должен быть тоже koi8-r.

Я Linux только начинаю изучать, так что извините за глупый вопрос, что вы подразумеваете под установкой charset программы, как это делается?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

16. "ncurses и русские символы"  
Сообщение от chip email(ok) on 01-Июн-06, 21:25 
>>Если запустить xterm следующим образом:
>>LANG=ru_RU.KOI8-R xterm -fn "-misc-fixed-medium-r-normal--15-140-75-75-c-90-koi8-r"
>>
>>и далее выполнить Вашу программу 100% должно всё работать. Разумеется charset программы
>>должен быть тоже koi8-r.
>
>Я Linux только начинаю изучать, так что извините за глупый вопрос, что
>вы подразумеваете под установкой charset программы, как это делается?

1.Запустить:
LANG=ru_RU.KOI8-R xterm -fn "-misc-fixed-medium-r-normal--15-140-75-75-c-90-koi8-r"

2.В запущенном окне выполнить:

cat << EOF > /tmp/test_curses.c
#include <curses.h>
int main()
{
initscr();
mvprintw(0,30,"привет");
refresh();
endwin();
}
EOF

3. Собрать приложение:
gcc /tmp/test_curses.c -lcurses -o /tmp/test_curses

4. Запустить приложение /tmp/test_curses и убедиться что всё при KOI8-R работает.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

17. "ncurses и русские символы"  
Сообщение от Igor1975 (ok) on 02-Июн-06, 12:26 
>1.Запустить:
>LANG=ru_RU.KOI8-R xterm -fn "-misc-fixed-medium-r-normal--15-140-75-75-c-90-koi8-r"
>
>2.В запущенном окне выполнить:
>
>cat << EOF > /tmp/test_curses.c
>#include <curses.h>
>int main()
>{
>initscr();
>mvprintw(0,30,"привет");
>refresh();
>endwin();
>}
>EOF
>
>3. Собрать приложение:
>gcc /tmp/test_curses.c -lcurses -o /tmp/test_curses
>
>4. Запустить приложение /tmp/test_curses и убедиться что всё при KOI8-R работает.


Большое спасибо за помощь, с KOI-8 получилось, пока не знаю решит ли это мою проблему, возможно все-таки придется пересобироть ncurses с utf-8

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "ncurses и русские символы"  
Сообщение от NuINu (ok) on 01-Июн-06, 13:10 
>Помогите разобраться с ncurses. При выводе сообщений с русским буквами, часть сообщения
>не читается. Как с этим бороться?

Бороться можно по разному, для начала приводишь здесь свой гениальный код, а мы смотрим что можно сделать...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "ncurses и русские символы"  
Сообщение от Igor1975 (ok) on 01-Июн-06, 14:03 
>
>Бороться можно по разному, для начала приводишь здесь свой гениальный код, а
>мы смотрим что можно сделать...

смысл такой:

#include <curses.h>
int main()
{
initscr();
mvprintw(0,30,"привет");
refresh();
}

выводится: "п#@иве@B", где @ - квадратик.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "ncurses и русские символы"  
Сообщение от NuINu (ok) on 01-Июн-06, 14:47 
>>
>>Бороться можно по разному, для начала приводишь здесь свой гениальный код, а
>>мы смотрим что можно сделать...
>
>смысл такой:
>

>выводится: "п#@иве@B", где @ - квадратик.

Извини, твоего результата добиться не удалось, и в графическом и текстовом терминалах у меня так и выводит: привет

проверь установки локалей, и разверни исходники библиотеки, посмотри может там в конфигурационном файле нужно указывать какие параметры для работы с локалями... мне признаться лень это разворачивать, а у тебя похоже выхода нет ;-)))

а просто printf у тебя что печатает???

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "ncurses и русские символы"  
Сообщение от Igor1975 (ok) on 01-Июн-06, 15:25 
>>>
>Извини, твоего результата добиться не удалось, и в графическом и текстовом терминалах
>у меня так и выводит: привет
>
>проверь установки локалей, и разверни исходники библиотеки, посмотри может там в конфигурационном
>файле нужно указывать какие параметры для работы с локалями... мне признаться
>лень это разворачивать, а у тебя похоже выхода нет ;-)))
>
>а просто printf у тебя что печатает???

printf выводит нормально

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "ncurses и русские символы"  
Сообщение от NuINu (ok) on 01-Июн-06, 16:09 
>>>>
>>Извини, твоего результата добиться не удалось, и в графическом и текстовом терминалах
>>у меня так и выводит: привет
>>
>>проверь установки локалей, и разверни исходники библиотеки, посмотри может там в конфигурационном
>>файле нужно указывать какие параметры для работы с локалями... мне признаться
>>лень это разворачивать, а у тебя похоже выхода нет ;-)))
>>
>>а просто printf у тебя что печатает???
>
>printf выводит нормально

надо копать наверняка на терминфо.... видит ли твоя нкурсес библиотеку терминалов, и вообще какая у тебя стоит TERM???

попробуй распечатать строчку абвгде....АБВГ....

у меня slackware старенькая - я ничего не менял. библиотека нкурс старая.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "ncurses и русские символы"  
Сообщение от Igor1975 (ok) on 01-Июн-06, 16:49 
>надо копать наверняка на терминфо.... видит ли твоя нкурсес библиотеку терминалов, и
>вообще какая у тебя стоит TERM???

стоит xterm, пробовал linux, то же самое

>
>попробуй распечатать строчку абвгде....АБВГ....

печатает: абвгдежзиклмноп, далее мусор до РСТУФХЦЧШЩЪЫЬЭЮЯ

>
>у меня slackware старенькая - я ничего не менял. библиотека нкурс старая.
>

ldd выдает libncurses.so.5
в библиотеках у меня лежит libncurses.so.5.4

у меня стоит SuSe 9.3

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

13. "ncurses и русские символы"  
Сообщение от NuINu (ok) on 01-Июн-06, 17:54 
вообщем когда я запускаю твою программулину, она мне напрочь сбивает настройки текущей сесси и терминала, а значит она создает по умолчанию фиг знает какие терминалы, я их потом только с stty могу поправить.

я то под ncurses не программировал но знаешь попробуй так:

#include <curses.h>

int main()
{
  int k = 0;
  SCREEN* old, *work;
  initscr();
  work= newterm("xterm", stdout, stdin);
  old = set_term(work);
  cbreak();
  noecho();
  mvprintw(0,30,"привет");
  do {
      k = getch();
  } while( k == 0);
  refresh();
  echo();

  set_term(old);
  endwin();
}


кстати дай команду stty до работы СВОЕЙ программы и после.... посмотри что меняется.

да можно попробовать разные имена терминалов
#include <curses.h>

int main(int argc, char* argv[])
{
  if(argc < 2) {
    printf("Use: koiout <termname>");
    return 1;
  }
  int k = 0;
  SCREEN* old, *work;
  initscr();
  work= newterm(argv[1], stdout, stdin);
  old = set_term(work);
  cbreak();
  noecho();
  mvprintw(0,30,"привет");
  do {
      k = getch();
  } while( k == 0);
  refresh();
  echo();

  set_term(old);
  endwin();
}

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "ncurses и русские символы"  
Сообщение от chip email(ok) on 01-Июн-06, 17:02 
>>>>>
>>>Извини, твоего результата добиться не удалось, и в графическом и текстовом терминалах
>>>у меня так и выводит: привет
>>>
>>>проверь установки локалей, и разверни исходники библиотеки, посмотри может там в конфигурационном
>>>файле нужно указывать какие параметры для работы с локалями... мне признаться
>>>лень это разворачивать, а у тебя похоже выхода нет ;-)))
>>>
>>>а просто printf у тебя что печатает???
>>
>>printf выводит нормально
>
>надо копать наверняка на терминфо.... видит ли твоя нкурсес библиотеку терминалов, и
>вообще какая у тебя стоит TERM???

Термитал он уже приводил командой tput longname


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

14. "ncurses и русские символы"  
Сообщение от chip email(ok) on 01-Июн-06, 19:45 
>Помогите разобраться с ncurses. При выводе сообщений с русским буквами, часть сообщения
>не читается. Как с этим бороться?


Ребята, заканчивайте флейм - ответ уже дан был - https://www.opennet.ru/openforum/vsluhforumID9/5469.html#9 .

Раз дистрибутив SuSE берем srpm от RedHat или Fedora, там есть соотвествующие патчи для utf8. Если хочется больше информации по теме имем в главном форуме на тему mc и ncurses (веток будет более чем достаточно).

Что касается программы, которая сносит крышу терминалу. Всё достаточно очевидно, помимо инициализации самой библиотеке вызовом initscr() завершение с endwin() еще никто НЕ отменял:
man 3 ncurses: The routine endwin must be  called  before  exiting.

Собственно, прототип её абсолютно схож с требуемым аргументом для atexit(). Поэтому добавляем смело:

if (atexit(endwin) < 0) {
   /* cleanup stuff */
   exit(EXIT_FAILURE);
}

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

18. "ncurses и русские символы"  
Сообщение от mrd email(??) on 30-Май-07, 23:47 
тут вот проблемка, может кто сталкивался
при создании меню в ncurses не выводятся русские буквы.
причем если сделать printw, то все норм выводится, а вот с меню беда
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру