0

我有以下程序,它尝试通过启用控制台_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. 我有以下问题:

  1. 什么情况下需要定义_UNICODE宏?
  2. 启用_UNICODE宏是否意味着我需要通过使用来分隔 ASCII 相关代码#ifdef _UNICODE?在上述程序的情况下,我是否需要将任何#ifdef UNICODE和 ASCII 码处理放入#else
  3. 我需要什么额外的东西才能使代码在 C/C++ 中具有 Unicode 支持?我需要链接到 Windows 和 Linux 上的任何特定库吗?
  4. 为什么我上面的示例程序不需要定义_UNICODE宏?
  5. 当我定义_UNICODE宏时,代码如何知道它使用的是 UTF-8、UTF-16 还是 UTF-32?如何在这些 Unicode 类型之间做出决定?
4

0 回答 0