这段代码在维基百科:
$ char=( 6a 6b 6c 6d 6e 71 74 75 76 77 78 )
$ for i in ${char[*]}; do printf "0x$i \x$i \e(0\x$i\e(B\n"; done
包括单行方框图字符。终端中有双行画框字符吗?
例如如何打印字符“╢”。
我将在 C++ 程序中使用它们,如下所示:
#include <stdio.h>
int main()
{
printf("\e(0\x6a\e(B "); // 188
printf("\e(0\x6b\e(B "); // 187
printf("\e(0\x6c\e(B "); // 201
printf("\e(0\x6d\e(B "); // 200
printf("\e(0\x6e\e(B "); // 206
printf("\e(0\x71\e(B "); // 205
printf("\e(0\x74\e(B "); // 204
printf("\e(0\x75\e(B "); // 185
printf("\e(0\x76\e(B "); // 202
printf("\e(0\x77\e(B "); // 203
printf("\e(0\x78\e(B "); // 186
}
答案1
您的终端设置使用什么字符集?如果您仍在使用 ASCII,则没有可用的双行方框图字符。如果您使用 UTF-8,则可以发送这些字符的 UTF-8 字符序列。我相信printf("╢")
如果你的编译器在源代码中接受 UTF-8,例如gcc
使用-finput-charset=UTF-8
.
答案2
一些评论建议将 ncurses 作为一种可能的解决方案。这样做有优点/缺点:
- ncurses 对于在屏幕上移动时绘制文本(全屏或使用 的全行
filter
)非常有用。 OP的示例打印了单行的片段,并且讨论没有给出这是否是典型的线索使用,或者更复杂的东西的一部分。 - ncurses 有一系列常用行的符号。显示的特定示例(混合单宽和双宽符号)不在该列表中,即Unicode字符集 '方框图垂直双左单' (U+2562)
ncurses 接受 UTF-8 字符串,并跟踪当前位置,但对方框图符号没有特殊意义不是在它的剧目中。自从2009年(在 5.7 版本之后),它具有用于双线和粗线绘制的符号,但这些符号与完整的 Unicode 方框绘制图形相距甚远,因为它们不是混合的。以下是 ncurses 测试程序的一些屏幕截图,显示了 ncurses 支持的预定义符号: