我尝试了很多方法来做到这一点……使用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字符的字形。香蕉是一种通常不会输入计算机的字符,所以你需要打开一个字体工具,在字体中搜索字形。如果它不存在于该字体中,则需要找到一个为该字符实现字形的字体。