Примечание автора: Ниже приведен анализ с максимальными усилиями, основанный главным образом на анализе ncurses.h в моей системе и сравнении его с исходным кодом ncurses-rs, Я могу ошибаться в некоторых деталях.
В ncurses псевдоним типа chtype
(который является третьим аргументом mvvline
) представляет однобайтовый символ плюс некоторые метаданные внешнего вида. Он не может хранить многобайтовый символ. Поэтому mvvline
просто не может отображать ┃
.
(Предположительно, причина, по которой вы получаете невидимую строку, заключается в том, что значение 9475
представляет управляющий символ с некоторой фиктивной информацией о внешнем виде. Я не смог понять о том, как его декодировать. Если вы возитесь с байтовыми значениями, я уверен, что вы можете получить линию, чтобы изменить цвета и содержать любой символ ASCII, который вы хотите.)
Чтобы нарисовать линию, используя "широкий" (многобайтовый) символ, вы должны указать ссылку на версию ncurses с поддержкой широких символов и использовать версию широких символов mvvline
, которая называется mvvline_set
. Эта функция принимает аргумент const cchar_t *
вместо chtype
, где cchar_t
- это структура, содержащая многобайтовый символ плюс некоторые метаданные.
К сожалению, хотя ящик ncurses ссылается на правильную версию ncurses библиотека, она не предоставляет никакого способа вызова mvvline_set
. Существует ряд других функций, которые также отсутствуют в API ncurses-rs, в основном те, которые используют структуру cchar_t
. Это означает, что вы не сможете использовать символы рисования линий Unicode в символьно-ориентированных функциях ncurses, если вы сами не напишите привязки.
Вы все равно сможете использовать многобайтовые символы в строках UTF-8 и передать их строковым функциям, таким как mvaddstr
.