在 C 中,可以像这样将 unicode 字符传递给 printf():
printf("some unicode char: %c\n", "\u00B1");
但问题是,在 POSIX 兼容系统上,'char' 始终是 8 位,并且大多数 UTF-8 字符(如上述)更宽,不适合 char,因此终端上没有打印任何内容。我可以这样做来实现这种效果:
printf("some unicode char: %s\n", "\u00B1");
%s 占位符自动展开,并在终端上打印一个 unicode 字符。此外,在标准中它说:
如果通用字符名称的十六进制值小于 0x20 或在 0x7F-0x9F(含)范围内,或者通用字符名称指定了基本源字符集中的字符,则程序格式错误。
当我这样做时:
printf("letter a: %c\n", "\u0061");
gcc 说:
错误:\u0061 不是有效的通用字符
所以这种技术也不能用于打印 ASCII 字符。在维基百科上的这篇文章http://en.wikipedia.org/wiki/Character_(computing)#cite_ref-3中它说:
C 编程语言中的 char 是一种大小正好为一个字节的数据类型,它又被定义为足够大以包含基本执行字符集和 UTF-8 代码单元的任何成员。
但这在 POSIX 系统上可行吗?