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 代码点使用代理项对。