10

我正在制作棋盘游戏Blokus的命令行版本,我想让这些棋子占据一行的全部高度。我尝试使用 Unicode 字符 █ (U+2588),但它会在行中留下垂直间隙,如下所示:

在此处输入图像描述

有谁知道我怎样才能让它占据整条线?

4

2 回答 2

9

根据定义,这些字符应该填充整个字符单元格。如果不是,则您使用的字体可能存在问题。(例如,您的默认字体可能没有该字符,因此终端必须使用具有不同指标的替代字体。)

您可以通过进入反视频模式 ( ) 并输出空格字符来“伪造”块字符,然后在完成"\x1b[7m"后切换回 ( ) 来解决此问题。"\x1b[0m"

于 2012-11-18T03:43:38.247 回答
7

U+2588 应该在终端中占据一行的全高,但由于字体问题,它并不总是这样做。

块元素字符在 Unicode 字符中的第 15.8节几何符号中进行了描述:“传统块元素旨在填充每个显示单元的某些已定义部分,或以某种定义的阴影程度填充每个显示单元。[...] 在模拟终端应用程序时,应设计实现块元素字符的字体,以便字符的相邻字形(例如 U+2588 全块)创建实体图案,它们之间没有间隙。”</p>

但是,支持 U+2588 的字体并不总是正确地实现它。因此,您应该检查是否可以将字体设置为具有正确 U+2588 字形的字体,例如 DejaVu Sans。

如果您在比简单终端更复杂的环境中使用 U+2588 和朋友,例如模拟简单终端的软件,或者在文字处理器中,您可能还会遇到另一个问题。即使 U+2588 在字体中正确实现时会占用字体的全高但通常不会占用行的全。通常行高大于字体高度(字体大小),您需要采取额外措施使它们相同(使文本“固定”)。

于 2012-11-18T07:23:43.460 回答