Вы могли использовать системный буфер обмена с "*y и" *p вместо нормального y и p.
Ваш главный пример работает с локалью не-Unicode (т.е. ASCII). Проверьте свою переменную среды $LANG (попытка export | grep LANG
); Вы, скорее всего, не найдете a .UTF-8
суффикс. Попытайтесь добавить его:
export LANG=$LANG.UTF-8
Ваш другой пример работает с локалью UTF-8, которая должна быть значением по умолчанию для недавних оболочек. Это кажется htop
обнаруживает Вашу локаль и отображает любой ASCII или Unicode символы - так в нижнем изображении, Вы получаете хорошие символы Unicode, в то время как с ASCII Вы получаете некоторые довольно импровизированные. Я предложил бы изменить локаль машины главного изображения к Unicode один (см. Локаль - Debian Wiki).
Если это не работает, могло бы случиться так, что Ваш эмулятор терминала является проблемой. Кодировка по умолчанию могла быть не-Unicode. Измените кодировку по умолчанию своего эмулятора терминала к UTF-8 (в xfce4-terminal
Я нашел его во Вкладке "Дополнительно"). Если Вы не можете, могло бы случиться так, что Ваш текущий шрифт не поддерживает Unicode: попытайтесь изменить свой шрифт на Unicode один.
[Странно, я нашел, после того как я изменил свою локаль на ASCII однажды на сессии оболочки, htop
всегда отображает символы ASCII, даже после возврата его. Это могло бы быть Вашей проблемой по некоторым причинам при изменении локали в оболочке иногда.]
Странно то, что htop
использует ncurses, который может рисовать линии с / без Unicode. Однако, глядя на исходный код в CRT.c
, можно увидеть объяснение:
#ifdef HAVE_LIBNCURSESW
if(strcmp(nl_langinfo(CODESET), "UTF-8") == 0)
CRT_utf8 = true;
else
CRT_utf8 = false;
#endif
CRT_treeStr =
#ifdef HAVE_LIBNCURSESW
CRT_utf8 ? CRT_treeStrUtf8 :
#endif
CRT_treeStrAscii;
и значение CRT_treeStrUtf8
равно
const char *CRT_treeStrUtf8[TREE_STR_COUNT] = {
"\xe2\x94\x80", // TREE_STR_HORZ ─
"\xe2\x94\x82", // TREE_STR_VERT │
"\xe2\x94\x9c", // TREE_STR_RTEE ├
"\xe2\x94\x94", // TREE_STR_BEND └
"\xe2\x94\x8c", // TREE_STR_TEND ┌
"+", // TREE_STR_OPEN +
"\xe2\x94\x80", // TREE_STR_SHUT ─
};
Однако ncurses (любая реализация curses) имеет переносимые символы для тех, которые не зависят от того, является ли кодировка UTF-8 или нет. Некоторые приложения (например, dialog - параметр ascii-lines
) предоставляют параметр для использования рисования линий ASCII, но приложение, которое даже не попытка использовать рисование линий, представленное в ncurses, не дает эффективного использования библиотеки.
Короче говоря, когда вы сталкиваетесь с программой, которая ведет себя подобным образом, вы должны сообщить об этом разработчикам как об ошибке.
Дополнительная литература:
border
, wborder
, box
, hline
], whline
, vline
, wvline
,
mvhline
, mvwhline
, mvvline
, mvwvline
- создать проклятия
границы, горизонтальные и вертикальные линии диалог
скриншоты ( нет требовать UTF -8, чтобы использовать рисование линий)