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
是什么,但对于所有其他效果,这应该是可移植的,不?
最佳答案
它可以工作,但它可能没有所需的语义。 \u00DA
将扩展为 UTF8/16/32 编码所需的尽可能多的目标字符,具体取决于 wchar_t
的大小,但请记住,宽字符串没有任何记录在案的、有保证的编码语义——它们只是“系统的编码”,没有试图说出那是什么,或者要求用户知道那是什么。
所以最好不要混搭。使用两者之一,但不能同时使用两者:
系统特定:
char*
/""
,wchar_t*
/L""
,\x
-literals,mbstowcs
/wcstombs
Unicode:
char*
/u8""
,char16_t*
/u""
,char32_t*
/U""
,\u
/\U
文字。
关于c++ - Unicode 字符串文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7636797/