UTF-16字符串文字,例如auto str = u"中国字";
。
UTF-16具有两个字节序:UTF-16LE和UTF-16BE。 C ++标准未指定UTF-16字符串文字的字节序。因此,我认为这是实现定义的。
在编译时是否可以指定字节序?
答案 0 :(得分:2)
以u
为前缀的字符串文字是const char16_t
值的数组:
C ++ 17 [lex.string] / 10:
以
u
开头的字符串文字,例如u"asdf"
,是char16_t
字符串文字。char16_t
字符串文字的类型为“ n constchar16_t
的数组”,其中n是如下定义的字符串的大小;会使用给定的字符进行初始化。
所以引号中的文字等效于Unicode系统上的
const char16_t x[] = { 97, 115, 100, 102, 0 };
换句话说,字符串文字的表示形式与该数组的表示形式相同。
对于更复杂的字符串,它仍然是const char16_t
的数组;并且每个 c-char 可能有多个代码点,即数组中的元素数量可能大于字符串中似乎出现的字符数量。
要回答标题中的问题:我不知道任何编译器选项(对于任何编译器)都可以让您配置char16_t
的字节序。我希望任何目标系统对所有整数类型都使用相同的字节序。 char16_t
应该具有与uint_least16_t
([basic.fundamental] / 5)相同的属性。
如果您的代码包含字符串文字,并且您想将其写为文件,例如UTF16-BE,则您需要进行常规的字节序检查/调整,以防系统将char16_t
很少地存储在<li>
中字节序形式。