如何从 C 中的控制台读取 banana()?

How to read banana () from console in C?

我尝试了很多方法.. 使用 scanf()getc(),但没有任何效果。大多数时候,0 存储在提供的变量中(可能表示输入错误?)。我怎样才能做到这样,当用户输入任何 Unicode 代码点时,它都能被正确识别并存储在字符串或字符中?

我猜您已经知道 C 字符和 Unicode 字符是两种截然不同的东西,所以我将跳过它。我将在此处做出的假设包括:

  • 您的 C 字符串将包含 UTF-8 编码字符,以 NUL (\x00) 字符结尾。
  • 您不会使用任何可能破坏每个字符编码的 C 函数,并且您将使用输出(strlen() 等),并理解您需要区分 C 字符和真实字符。

真的很简单:

char input[256];
scanf("%[^\n]", &input);
printf("%s\n", input);

问题在于提供输入的内容以及显示输出的内容。

#include <stdio.h>

int main(int argc, char** argv) {
  char* bananna = "\xF0\x9F\x8D\x8C\x00";
  printf("%s\n", bananna);
}

这可能不会显示香蕉。那是因为写入终端的 UTF-8 序列没有被解释为 UTF-8 序列。

所以,您需要做的第一件事就是配置您的终端。如果您的程序可能只使用一种终端类型,那么您甚至可以在程序内部执行此操作;然而,有很多人使用不同的终端,有些甚至跨越了操作系统的界限。例如,我正在 Windows 终端中测试我的 Linux 程序,使用 SSH 连接到 Linux 系统。

配置终端后,您可能已经正确的程序应该会显示一个香蕉。但是,即使是正确配置的终端也可能会失败。

验证终端配置正确后,最后一块拼图就是字体了。并非所有字体都包含所有 Unicode 字符的字形。香蕉是通常不会输入计算机的字符之一,因此您需要打开字体工具并在字体中搜索字形。如果该字体中不存在该字体,则您需要找到实现该字符字形的字体。