NCURSES litery zamiast znaków linii w niektórych terminalach

0

Witam,
mam problem ze znakami linii w niektórych terminalach np. Putty pod Windowsem jak i Termius - Telnet & SSH Client pod androidem.
Zamiast linii (ramek) wyświetlają się litery. Co ciekawe na konsolach ubuntu na terminalu standardowym jak i xterm działa to poprawnie jak i na: JuiceSSH - SSH Client pod androidem.

Natomiast MC pod Linuxa (Midnight Commander) Na wszystkim wyświetla się poprawnie, stąd twierdze że problem jest z NCURSES.

Program piszę na ubuntu QT C++ tryb konsoli.

wersja bibliotek NCURSES: 5.9

deklaracja w pliku .pro :

 LIBS += -lncursesw

deklaracja w kodzie programu:

 #include <ncursesw/cursesw.h>

testuje tek kod:

 initscr();
        attron(A_UNDERLINE);
        mvprintw(0,7,"NCURSES EXTENDED CHARACTERS\n");
        attroff(A_UNDERLINE);
        printw("Upper left corner         "); addch(ACS_ULCORNER); printw("  ACS_ULCORNER\n"); 
        printw("Lower left corner         "); addch(ACS_LLCORNER); printw("  ACS_LLCORNER\n");
        printw("Upper right corner        "); addch(ACS_URCORNER); printw("  ACS_URCORNER\n");
        printw("Lower right corner        "); addch(ACS_LRCORNER); printw("  ACS_LRCORNER\n");
        printw("Tee pointing right        "); addch(ACS_LTEE); printw("  ACS_LTEE\n");
        printw("Tee pointing left         "); addch(ACS_RTEE); printw("  ACS_RTEE\n");
        printw("Tee pointing up           "); addch(ACS_BTEE); printw("  ACS_BTEE\n");
        printw("Tee pointing down         "); addch(ACS_TTEE); printw("  ACS_TTEE\n");
        printw("Horizontal line           "); addch(ACS_HLINE); printw("  ACS_HLINE\n");
        printw("Vertical line             "); addch(ACS_VLINE); printw("  ACS_VLINE\n");
        printw("Large Plus or cross over  "); addch(ACS_PLUS); printw("  ACS_PLUS\n");
        printw("Scan Line 1               "); addch(ACS_S1); printw("  ACS_S1\n");
        printw("Scan Line 3               "); addch(ACS_S3); printw("  ACS_S3\n");
        printw("Scan Line 7               "); addch(ACS_S7); printw("  ACS_S7\n");
        printw("Scan Line 9               "); addch(ACS_S9); printw("  ACS_S9\n");
        printw("Diamond                   "); addch(ACS_DIAMOND); printw("  ACS_DIAMOND\n");
        printw("Checker board (stipple)   "); addch(ACS_CKBOARD); printw("  ACS_CKBOARD\n");
        printw("Degree Symbol             "); addch(ACS_DEGREE); printw("  ACS_DEGREE\n");
        printw("Plus/Minus Symbol         "); addch(ACS_PLMINUS); printw("  ACS_PLMINUS\n");
        printw("Bullet                    "); addch(ACS_BULLET); printw("  ACS_BULLET\n");
        printw("Arrow Pointing Left       "); addch(ACS_LARROW); printw("  ACS_LARROW\n");
        printw("Arrow Pointing Right      "); addch(ACS_RARROW); printw("  ACS_RARROW\n");
        printw("Arrow Pointing Down       "); addch(ACS_DARROW); printw("  ACS_DARROW\n");
        printw("Arrow Pointing Up         "); addch(ACS_UARROW); printw("  ACS_UARROW\n");
        printw("Board of squares          "); addch(ACS_BOARD); printw("  ACS_BOARD\n");
        printw("Lantern Symbol            "); addch(ACS_LANTERN); printw("  ACS_LANTERN\n");
        printw("Solid Square Block        "); addch(ACS_BLOCK); printw("  ACS_BLOCK\n");
        printw("Less/Equal sign           "); addch(ACS_LEQUAL); printw("  ACS_LEQUAL\n");
        printw("Greater/Equal sign        "); addch(ACS_GEQUAL); printw("  ACS_GEQUAL\n");
        printw("Pi                        "); addch(ACS_PI); printw("  ACS_PI\n");
        printw("Not equal                 "); addch(ACS_NEQUAL); printw("  ACS_NEQUAL\n");
        printw("UK pound sign             "); addch(ACS_STERLING); printw("  ACS_STERLING\n\n");
        refresh();
        getch();
        endwin();
        return 0;

Niestety tak jak napisałem wyżej na niektórych terminalach wyświetlają się litery zamiast linii itp. Natomiast MC wyświetla się na wszystkim prawidłowo.

0

Problemem jest kodowanie znaków.
Oba terminale kodują je inaczej.
Po prostu twój program musi zadbać by wyświetlanie odbywało się we właściwym kodowaniu.
Problemem może być też to jak zbudowałeś aplikację, pomieszane kodowanie.

0

a jak ustawic je poprawnie ?

0

Pewien problem istnieje znalazłem opis go na stronie:
http://unix.stackexchange.com/questions/17419/using-curses-with-linux-console
Ale nadal nie wiem jak sobie poradzić z tym w ubuntu
Pobrałem grę napisaną w NCURSES "bastet" I też wyświetlają się litery zamiast linii.
Natomiast MC też używa (podobno) NCURSES i działa .
Macie pomysł na rozwiązanie tego problemu. Bo kodowanie mam ustawione na UTF i sprawdzałem czy takie jest w terminalu

Na Termius - Telnet & SSH Client pod androidem działają linie jak ustawie emulacje na VT100, (ale nie ma kolorów!) , na xterm-256color nie działa prawidłowo ,
praktycznie na większości terminali nie wyświetlają się linie.

Gdzieś znalazłem że ustawienie tej zmiennej środowiskowej może pomóc export NCURSES_NO_UTF8_ACS=1 ale też to nie działa albo coś źle zrobiłem:/

Dodam jeszcze że pod samym ubuntu na różnych terminalach wyświetlają się prawidłowo . Problem jest przy połączeniach zdalnych przez SSH czy to z androida czy putty z windowsa

0

kodowanie w ubuntu jest utf8
ale jak łączę się przez ssh do tego ubuntu to mam iso - latin-1

jak to naprawić ?

0

Kodowanie znaków po stronie serwera zależy od zmiennej LC_CTYPE (wczytywanej z /etc/default/locale i pochodnych), kodowanie po stronie klienta zależy od klienta.

0

wszystkie zmienne mam ustawione na UTF i na razie D***

0

Kodowanie MC jest poprawne a mojego programu lub innego przykładowego w ncurses już nie przez terminal ssh

i to mnie zastanawia.

jak zamienię na latin-1 w terminalu to mc wyświetla się błędnie a mój program prawidłowo..

1

Prawidłowe ustawienie to:

(w .pro) LIBS =+ -ncursesw

#include<ncurses.h>
setlocale(LC_ALL,"");
initscr(); 
0

THX!

1 użytkowników online, w tym zalogowanych: 0, gości: 1