[英]strange extended characters in ncurses
我正在編寫一個ncurses應用程序,如何將特殊字符打印到屏幕上存在一個奇怪的問題。 這是一個例子:
#include <ncurses.h>
int main(int argc, char *argv[])
{
initscr();
noecho();
keypad(stdscr, TRUE);
cbreak();
curs_set(0);
addch(ACS_LARROW);
addch(' ');
addch(ACS_UARROW);
addch(' ');
addch(ACS_DARROW);
addch(' ');
addch(ACS_RARROW);
addch(' ');
refresh();
getch();
endwin();
return 0;
}
因此,當我在tty上運行此字符時,字符正確地打印為箭頭(←,↑,↓,→),但是當我嘗試在終端上運行它(我在gnome-terminal和LXTerminal上嘗試過)時,這是輸出:
< ^ v >
有什么區別的原因嗎? 我以為可能與字體有關,但是我真的不在這里,而且谷歌搜索沒有幫助。
關於如何強制lxterminal(或任何其他終端)輸出tty相同字符的任何建議?
ncurses根據您的術語類型決定為ACS_LARROW和朋友輸出哪個字符。 在tty中,您的termtype可能設置為“ linux”,而在gnome-terminal等中,很有可能將其設置為“ xterm”。 盡管我不確定,但xterm termtype很可能不支持這些字符。
您可以嘗試這樣運行應用程序:
env TERM=linux ./a.out
可以嘗試使用的其他術語類型是gnome,rxvt和vt102。 這些將輸出擴展的ASCII字符,並且您的終端仿真器應支持它們。 如果已安裝rxvt-unicode,也可以嘗試使用它,它應該為這些特殊符號輸出正確的unicode代碼點。
終端仿真有時以7位ASCII編碼,並且此代碼頁中沒有相應的箭頭值(帶有線和楔形),因此終端顯示附近的內容(即:僅楔形)。 在tty上,您具有計算機的所有功能(UTF-8,顏色編碼等),因此終端可以繪制箭頭。
TERM
的設置在很大程度上無關緊要。 重要的是
通常的原因是該程序是內置並鏈接到ncurses庫的,而不是ncursesw的 :
screen
是terminfo無法描述終端行為的已知特殊情況。 對於其他終端(在UTF-8模式下不支持VT100線描的終端),應設置NCURSES_NO_UTF8_ACS
。 U8
注意 )。 但是,大多數人將TERM設置為xterm
或linux
並且經常將它們等同(請參閱xterm FAQ中的注釋)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.