gcc ncurses печатает символы расширения (глифы), такие как char 223
Я пишу терминальную программу для Raspberry Pi, используя ncurses. Я хочу добавить тень вокруг коробки. Я хочу использовать mvaddch()
распечатать расширенные символы, такие как символ 233 (символ верхней половины поля). Какой будет синтаксис для mvaddch()
команда? Или есть другой способ сделать это?
1 ответ
Вы, вероятно, имеете в виду что-то вроде кодовой страницы 866. ncurses предполагает, что ваш терминал отображает символы, соответствующие кодировке локали, которая, вероятно, является UTF-8. Поэтому (если вы не хотите конвертировать символы в вашей программе) нужно использовать значения Юникода.
В организации Unicode есть таблицы, которые вы можете использовать для поиска определенного кода, например, ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/PC/CP866.TXT. Для вашего примера соответствующая строка
0xdf 0x2580 #UPPER HALF BLOCK
(потому что 0xdf это 223). Вы бы использовали Unicode 0x2580
в вызове функции mvaddwstr, например
wchar_t mydata[] = { 0x2580, 0 };
mvaddwstr(0,0, mydata);
(с одноименным названием wadd_wch
использует структуру данных, которая является более сложной).
Вам нужно будет связаться с библиотекой ncursesw и, конечно, инициализировать локаль вашей программы, используя setlocale
как упомянуто на странице руководства ncurses.