如何在char16_t字符串文字中编写unicode点U + 10000?

时间:2013-07-04 15:39:41

标签: c++ unicode c++11

C ++ 11标准中的第2.14.5p9段(强调我的):

  

以u开头的字符串文字,例如u“asdf”,是一个char16_t   字符串字面量。 char16_t字符串文字的类型为“const of n const”   char16_t“,其中n是下面定义的字符串的大小;它有   静态存储持续时间并使用给定的字符初始化。   单个c-char可能会产生多个char16_t字符   代理对的形式

如何编写unicode点U + 10000,它由char16_t字符串文字中的代理对D800(高代理)和DC00(低代理)组成?

引用文本中上面提到的c-char是什么意思?

1 个答案:

答案 0 :(得分:4)

实际上很简单:u"\U00010000"。如文中所述,单个 c-char (在本例中为\U00010000)可以生成多个char16_t。快速测试将显示u"\U00010000"的类型为char16_t const[3](代理对为2,对于空终止符为1)。

或者,您可以简单地将字符直接放在字符串中,如u"",假设源文件是使用编译器期望的编码保存的。这将是完全相同的事情,因为在源文件上执行的第一步之一是用其通用字符名称替换基本字符集之外的任何字符(即\U00010000 )。

c-char 是“除了单引号',反斜杠\或换行符”之外的源字符集的任何成员,或者转义序列(例如\n\123\x41)或通用字符名称(例如{ {1}}或\u1234)。

标准文档附近有一个语法产品索引,您可以使用它来查找这些内容。