我有以下程序,它尝试通过启用控制台_O_U16TEXT
模式在控制台上打印 Unicode 字符:
#include <iostream>
#include <fcntl.h>
#include <io.h>
int main()
{
_setmode(_fileno(stdout), _O_U16TEXT);
wprintf(L"test\n \x263a\x263b Hello from C/C++\n");
return 0;
}
我不清楚的是,我见过许多 C++ 项目(在 Windows 和 Linux 上运行相同的代码)并使用一个名为_UNICODE
. 我有以下问题:
- 什么情况下需要定义
_UNICODE
宏? - 启用
_UNICODE
宏是否意味着我需要通过使用来分隔 ASCII 相关代码#ifdef _UNICODE
?在上述程序的情况下,我是否需要将任何#ifdef UNICODE
和 ASCII 码处理放入#else
? - 我需要什么额外的东西才能使代码在 C/C++ 中具有 Unicode 支持?我需要链接到 Windows 和 Linux 上的任何特定库吗?
- 为什么我上面的示例程序不需要定义
_UNICODE
宏? - 当我定义
_UNICODE
宏时,代码如何知道它使用的是 UTF-8、UTF-16 还是 UTF-32?如何在这些 Unicode 类型之间做出决定?