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.

Другие вопросы по тегам