Windows中L""后面的编码是什么?
What is the encoding behind L"" in Windows?
我正在尝试查找有关 L""
字符串编码的任何信息?
https://docs.microsoft.com/en-us/cpp/cpp/string-and-character-literals-cpp?view=msvc-160
我知道 wchar_t
是未定义的,因为它可以是任何多字节编码。但是如果我使用 L""
字符串会怎样?甚至文档也只是遗漏了信息。
auto s2 = L"hello"; // const wchar_t* <-- it's undefined but why?
auto s3 = u"hello"; // const char16_t*, encoded as UTF-16
auto s4 = U"hello"; // const char32_t*, encoded as UTF-32
wchar_t
是一个标准类型,但它的具体实现留给了各个编译器。当 Unicode 全部适合 16 位数量时,Microsoft 决定 wchar_t
大小为 2 个字节,而 Windows 将使用 UCS-2。后来,当 Unicode 超过 16 位数量时,Windows 被更新为使用 UTF-16,并且由于 Windows 在小端处理器上运行,这使它成为 UTF-16LE。 wchar_t
保留 2 个字节的大小,可以处理 UTF-16 值,对 U+FFFF 以上的 Unicode 代码点使用代理项对。
我正在尝试查找有关 L""
字符串编码的任何信息?
https://docs.microsoft.com/en-us/cpp/cpp/string-and-character-literals-cpp?view=msvc-160
我知道 wchar_t
是未定义的,因为它可以是任何多字节编码。但是如果我使用 L""
字符串会怎样?甚至文档也只是遗漏了信息。
auto s2 = L"hello"; // const wchar_t* <-- it's undefined but why?
auto s3 = u"hello"; // const char16_t*, encoded as UTF-16
auto s4 = U"hello"; // const char32_t*, encoded as UTF-32
wchar_t
是一个标准类型,但它的具体实现留给了各个编译器。当 Unicode 全部适合 16 位数量时,Microsoft 决定 wchar_t
大小为 2 个字节,而 Windows 将使用 UCS-2。后来,当 Unicode 超过 16 位数量时,Windows 被更新为使用 UTF-16,并且由于 Windows 在小端处理器上运行,这使它成为 UTF-16LE。 wchar_t
保留 2 个字节的大小,可以处理 UTF-16 值,对 U+FFFF 以上的 Unicode 代码点使用代理项对。