Unicode字符串文字

时间:2011-10-03 15:01:48

标签: c++ c++11 unicode string-literals unicode-literals

C ++ 11引入了一组新的字符串文字前缀(甚至允许用户定义的后缀)。除此之外,您可以直接使用Unicode转义序列来编码某个符号,而无需担心编码。

const char16_t* s16 = u"\u00DA";
const char32_t* s32 = U"\u00DA";

但是我可以在wchar_t字符串文字中使用unicode转义序列吗?如果不可能,这似乎是一个缺陷。

const wchar_t* sw = L"\u00DA";

sw[0]的整数值当然取决于特定平台上的wchar_t,但对于所有其他效果,这应该是可移植的,不是吗?

1 个答案:

答案 0 :(得分:10)

它可以工作,但它可能没有所需的语义。 \u00DA将扩展为UTF8 / 16/32编码所需的目标字符数,具体取决于wchar_t的大小,但请记住,宽字符串没有任何记录的,保证编码语义 - - 它们只是“系统的编码”,没有试图说出它是什么,或者要求用户知道是什么。

所以最好不要混合搭配。使用两者中的任何一个,但不是两个:

  1. 系统特定:char* / ""wchar_t* / L""\x - 文字,mbstowcs / {{ 1}}

  2. Unicode:wcstombs / char*u8"" / char16_t*u"" / char32_t*U"" / \u文字。

  3. (以下是关于此主题的some related questions。)