如何在C中从控制台读取香蕉(🍌)



我尝试了很多方法来做到这一点……使用scanf()getc(),但都没有成功。大多数情况下,0存储在提供的变量中(可能表示输入错误?(。我如何才能让用户在输入任何Unicode代码点时正确识别并存储在字符串或字符中?

我猜您已经知道C字符和Unicode字符是两种非常不同的东西,所以我将跳过它。我在这里要做的假设包括:

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

它真的很简单:

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

问题在于什么提供了输入,什么显示了输出。

#include <stdio.h>
int main(int argc, char** argv) {
char* bananna = "xF0x9Fx8Dx8Cx00";
printf("%sn", bananna);
}

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

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

一旦配置了终端,您可能已经正确的程序应该显示一个香蕉。但是,即使是正确配置的终端也可能出现故障。

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

最新更新