在某些程序中,例如htop
线条和框架显示不正确。而是将它们显示为-
和/
。
但是在另一台计算机上,它们正确显示为正确的行:
我不确定这是否是终端问题,或者是否需要某些软件包。
如果相关:我的系统是Debian Wheezy,我的解释器是bash
,我的终端模拟器是gnome-terminal
htop
显示ASCII字符。但是,如果默认终端字体是非Unicode字体,那么编码也是可能的,因此我将其添加到了答案中。
在某些程序中,例如htop
线条和框架显示不正确。而是将它们显示为-
和/
。
但是在另一台计算机上,它们正确显示为正确的行:
我不确定这是否是终端问题,或者是否需要某些软件包。
如果相关:我的系统是Debian Wheezy,我的解释器是bash
,我的终端模拟器是gnome-terminal
htop
显示ASCII字符。但是,如果默认终端字体是非Unicode字体,那么编码也是可能的,因此我将其添加到了答案中。
Answers:
您的最佳示例以非Unicode语言环境(即ASCII)运行。检查您的$ LANG环境变量(试试看export | grep LANG
);您很可能找不到.UTF-8
后缀。尝试添加它:
export LANG=$LANG.UTF-8
您的另一个示例使用UTF-8语言环境运行,这应该是最新shell的默认语言环境。似乎htop
可以检测到您的语言环境并显示ASCII或Unicode字符-因此在下图中,您会得到漂亮的Unicode字符,而在ASCII中,您会得到一些漂亮的临时字符。我建议将顶部图片的计算机的语言环境更改为Unicode 语言环境(请参阅Locale-Debian Wiki)。
如果这不起作用,则可能是您的终端仿真器有问题。默认编码可以是非Unicode。将终端仿真器的默认编码更改为UTF-8(xfce4-terminal
在“高级”选项卡中找到了该编码)。如果不能,则可能是您当前的字体不支持Unicode:请尝试将字体更改为Unicode。
[奇怪的是,我发现一旦在shell会话中将语言环境更改为ASCII htop
,即使将其更改回原样,也始终显示ASCII字符。这可能是您的问题,如果由于某种原因您偶尔会在shell中更改语言环境。]
奇怪的是,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;
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
- 创建诅咒边界,水平和垂直线dialog
截屏(没有需要UTF-8编码来使用画线)LANG
/ LC_ALL
启用预期的Unicode线条绘制字符htop
),但这非常有趣。感谢您抽出宝贵的时间来解释它!