strcpy(t, u8"\u1D004");
print("%s", t)这是打印A4,以1D00作为A的符号。我希望它像https://en.wikipedia.org/wiki/Byzantine_Musical_Symbols中的一样打印。
谢谢,
发布于 2016-05-09 18:37:30
阅读the documentation!
\unnnn universal character name
(arbitrary Unicode value); code point U+nnnn
may result in several characters
------------------------------------------------------------------------
\Unnnnnnnn universal character name
(arbitrary Unicode value); code point U+n
may result in several characters所以:
strcpy(t, u8"\U0001D004");
// ^^^^^发布于 2016-05-09 18:56:03
u8"\u1D004“
\unnnn仅适用于的四位十六进制数字。1D004是五位数字,因此它被解释为'\u1D00' (拉丁字母小型大写A)后跟'4'。程序(一如既往)完全按照你告诉它的去做,而不是你认为你告诉它去做的事情。;-)
\unnnn只能用于指定Basic Multilingual Plane中的字符,但有以下几个值得注意的例外:
基本源字符集中的
$、@和反号除外)对于BMP之外的字符(就像您使用拜占庭音乐符号OXEIA DIPLI一样),请使用\Unnnnnnnn (上面的例外也适用于此)。
国际标准化组织14881-2014年(编程语言标准C++,2.3字符集,第2款)的相关部分:
通用字符名称结构提供了一种命名其他字符的方法。
hex-quad:十六进制数字通用字符名称:\u quad \U quad
由通用字符名称\UNNNNNNNN指定的字符是其在ISO/IEC 10646中的字符短名为NNNNNNNN的字符;由通用字符名称\uNNNN指定的字符是其在ISO/IEC 10646中的字符短名为0000NNNN的字符。如果通用字符名称的十六进制值对应于代理代码点(在0xD800-0xDFFF范围内,包括0xD800和0xDFFF),则程序的格式不正确。此外,如果字符或字符串文字的c-char-序列、s-char-序列或r-char-序列之外的通用字符名称的十六进制值对应于控制字符(在0x00-0x1F或0x7F-0x9F范围内,包括0x00-0x1F或0x7F-0x9F)或基本源字符集中的字符,则程序的格式不正确。
https://stackoverflow.com/questions/37113545
复制相似问题