Windows unicode 控制台应用程序使用什么语言环境 LC_CTYPE?
What locale LC_CTYPE is used for Windows unicode console app?
在将多字节控制台应用程序转换为 Unicode 时,我 运行 遇到了一个奇怪的问题,其中 _tcprintf
和 WriteConsole
工作正常,但 _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");
}
在将多字节控制台应用程序转换为 Unicode 时,我 运行 遇到了一个奇怪的问题,其中 _tcprintf
和 WriteConsole
工作正常,但 _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");
}