在C语言中,可以将unicode字符传递给printf(),如下所示:
printf("some unicode char: %c\n", "\u00B1");
但问题是,在POSIX兼容的系统上,“char”总是8位的,而且大多数UTF-8字符(如上所述)更宽,不适合char,因此终端上不会打印任何内容。不过,我可以做到这一点:
printf("some unicode char: %s\n", "\u00B1");
%占位符将自动展开,并在终端上打印unicode字符。另外,在一个标准中,它说:
如果通用字符名的十六进制值小于
0x20或在0x7F-0x9F(含)范围内,或者
字符名指定基本源字符中的字符
设置,则程序不正确。
当我这样做时:
printf("letter a: %c\n", "\u0061");
海合会说:
错误:u0061不是有效的通用字符
因此,这种技术也不能用于打印ASCII字符。在维基百科的这篇文章中,它说:
C语言中的字符是一种数据类型,其大小为
正好是一个字节,然后定义为足够大
包含基本执行字符集的任何成员和UTF-8代码
单位。
但这在POSIX系统上可行吗?
最佳答案
在基于字节的字符串中使用通用字符取决于编译时和运行时字符编码的匹配,因此除了在某些情况下,这通常不是一个好主意。但是它们在宽字符串和宽字符文本中工作得非常好:printf("%ls", L"\u00B1");
或printf("%lc", L'\00B1');
将以正确的语言环境编码打印U+00B1。