ANSI 终端分层字符一个在另一个之上

ANSI Terminal layering characters one on top of another

是否可以在 ANSI 终端(或模拟器,它可以是任何类型)的上下文中将两个字符重叠绘制?或者,至少,有没有办法在它上面打印一个字符和一个条(比如下划线,带线)?

  1. 无法在终端中逐个绘制字符。这完全违反了终端的基本原则,即每个单元格包含 1 个字符。

  2. 如果您的终端支持 unicode,则有特殊的 unicode 字符称为 combining characters,其中之一是上划线。它的代码是U+0305。因此,使用它,您可以在另一个字符上绘制上划线。

这是执行此操作的示例 C 代码

 #include <stdio.h>
 #include <wchar.h>
 #include <locale.h>
 int main() {
     setlocale(LC_CTYPE, "");
     for (wchar_t ch = 'a'; ch <= 'z'; ++ch) {
         wprintf(L"%lc\u0305 ", ch);
    }
 }

应该会产生类似的东西

a̅ b̅ c̅ d̅ e̅ f̅ g̅ h̅ i̅ j̅ k̅ l̅ m̅ n̅ o̅ p̅ q̅ r̅ s̅ t̅ u̅ v̅ w̅ x̅ y̅ z̅

差不多就是你想要的了。