Windows unicode 控制台应用程序使用什么语言环境 LC_CTYPE?

What locale LC_CTYPE is used for Windows unicode console app?

在将多字节控制台应用程序转换为 Unicode 时,我 运行 遇到了一个奇怪的问题,其中 _tcprintfWriteConsole 工作正常,但 _tprintf 正在打印错误的字符...

我追溯到使用 setlocale(LC_ALL, "C"),它使用基于 MS 文档的 LC_CTYPE of 1 byte:

The C locale assumes that all char data types are 1 byte and that their value is always less than 256.

但是,我想保留 "C" 除了 LC_CTYPE 但我不知道该用什么?

我认为使用 UTF16 的全部意义在于所有字符都可用,并且无论代码页或语言环境如何,都可以正确打印。

虽然在 Unicode 应用程序中将控制台输出设置为 UTF-8 (65001)(SetConsoleCP 当然与语言环境是分开的)并且输出 UTF16 也有显示正确字符的问题。

无论如何,有人知道我应该在 Windows Unicode 控制台应用程序上为 UTF16 使用 LC_CTYPE 什么值吗?也许就像 setlocale( LC_CTYPE, "" ); 一样简单? TIA!!

使用_setmode()设置文件翻译模式为_O_U16TEXT:

#include <fcntl.h>
#include <io.h>
#include <stdio.h>

int main(void)
{
    _setmode(_fileno(stdout), _O_U16TEXT);
    wprintf(L"ελληνικά\n");
}