这个字符在 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
。考虑其他打印函数,就像printf
Alex 所说的那样。
当然,你的终端必须支持 Unicode,哈哈。