不打印5个字母长的unicode

时间:2016-05-09 10:33:40

标签: c++ unicode

strcpy(t, u8"\u1D004");
print("%s", t)

这是打印A4,以1D00作为A的符号。 我希望它在https://en.wikipedia.org/wiki/Byzantine_Musical_Symbols

打印出来

谢谢,

2 个答案:

答案 0 :(得分:4)

阅读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");
//           ^^^^^

答案 1 :(得分:3)

u8"\u1D004"

\unnnn仅适用于四位十六进制数字1D004是五位数,因此它被解释为'\u1D00'(LATIN LETTER SMALL CAPITAL A),然后是'4'。程序(一如既往)完全按照你的要求去做,而不是你告诉它做的想法。 ; - )

\unnnn可用于仅指定Basic Multilingual Plane中的字符,但有以下可注明的例外情况:

  • 代理对(0xd800 - 0xdfff)
  • C0和C1控制字符(0x00-0x1f,0x7f-0x9f)
  • 基本源字符集中的字符(可打印的ASCII-7,$@和反引号除外)

对于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范围内,包括两者)或基本字符   源字符集,程序格式不正确。