如何使用 C 在 Linux 终端中打印 ■ 字符?

如何使用 C 在 Linux 终端中打印 ■ 字符?

这个字符在 ASCII 扩展表中是 254,在 Unicode 中是 25A0。如果我运行putchar(254)终端,它不会识别这个字符,因为我认为它没有使用扩展 ASCII。

答案1

printf("■\n");对我有用 -putchar('■');给我一个关于多字符字符常量的警告。putchar(254);给我一个 'þ' 字符。另外,请确保您使用的终端仿真器支持 unicode。

答案2

不存在“扩展 ASCII”这种东西。有数十种甚至数百种基于 ASCII 的 8 位编码。其中许多在 Ubuntu 上可用,但它们并不常用。现代计算机世界(无论是否使用 Ubuntu)都使用统一码字符集,通常编码为UTF-8。Unicode 是一个 32 位字符集,UTF-8 将每个 32 位代码点编码为一到四个 8 位字节。

如果字符 254 是 ■,则您可能需要 PC 计算机文本模式中使用的 8 位编码之一,有时称为DOS 代码页。我找不到一个简单的方法来运行需要 DOS 代码页的程序(有些终端,包括 xterm,但不包括 Gnome-terminal,通过以下方式支持 8 位代码页:luit。但 Ubuntu 没有提供 DOS 代码页的语言环境定义。)您可以使用iconv或者recode在 DOS 代码页和 UTF-8 之间进行转换,例如

my_program_that_outputs_cp437 | iconv -f CP437

如果您现在正在编写程序,除非您需要与 20 世纪的软件兼容,否则请使用 Unicode 和 UTF-8。因此,如果您想要 ■(黑色方块),则它是代码点 25A0。由于 UTF-8 每个字符使用多个字节,因此您需要puts(),而不是putchar():C 中的“char”是单个字节。

puts("■");

putchar(254)由于它是未完成的 UTF-8 编码,因此不打印任何内容。

答案3

C(还有 C++ 等)非常烦人——单个 Unicode 字符不是一个“字符”。由于 Unicode 使用多个字节来存储单个字符,因此您不能使用仅支持一个“字符”的函数,例如putchar。考虑其他打印函数,就像printfAlex 所说的那样。

当然,你的终端必须支持 Unicode,哈哈。

相关内容