strcpy(t, u8"\u1D004");
print("%s", t)
这是打印A4,以1D00作为A的符号。 我希望它在https://en.wikipedia.org/wiki/Byzantine_Musical_Symbols
打印出来谢谢,
答案 0 :(得分:4)
\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");
// ^^^^^
答案 1 :(得分:3)
u8"\u1D004"
\unnnn
仅适用于四位十六进制数字。 1D004
是五位数,因此它被解释为'\u1D00'
(LATIN LETTER SMALL CAPITAL A),然后是'4'
。程序(一如既往)完全按照你的要求去做,而不是你告诉它做的想法。 ; - )
\unnnn
可用于仅指定Basic Multilingual Plane中的字符,但有以下可注明的例外情况:
$
,@
和反引号除外)对于BMP以外的角色(如您在BYZANTINE MUSICAL SYMBOL OXEIA DIPLI的情况下),请使用\Unnnnnnnn
(上述例外适用于此)。
ISO 14881-2014(编程语言C ++标准,2.3字符集,第2段)的相关部分:
通用字符名称构造提供了一种命名其他字符的方法。
hex-quad: hexadecimal-digit hexadecimal-digit hexadecimal-digit hexadecimal-digit universal-character-name: \u hex-quad \U hex-quad hex-quad
通用字符名
\UNNNNNNNN
指定的字符是其字符的字符 ISO / IEC 10646中的简称是NNNNNNNN
;通用字符名称\uNNNN
指定的字符 是ISO / IEC 10646中的字符短名称为0000NNNN
的字符。如果为十六进制值 universal-character-name对应于代理代码点(在0xD800-0xDFFF范围内,包括在内), 该计划格式不正确。另外,如果通用字符名称的十六进制值在 字符或字符串文字的 c-char-sequence , s-char-sequence 或 r-char-sequence 对应一个控件 字符(在0x00-0x1F或0x7F-0x9F范围内,包括两者)或基本字符 源字符集,程序格式不正确。