如何将 wchar_t 值打印到控制台?

新手上路,请多包涵

例子:

 #include <iostream>

using namespace std;

int main()
{
    wchar_t en[] = L"Hello";
    wchar_t ru[] = L"Привет"; //Russian language
    cout << ru
         << endl
         << en;
    return 0;
}

此代码仅打印地址等十六进制值。如何打印 wchar_t 字符串?

原文由 zed91 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

编辑:如果您尝试编写无法在默认语言环境中表示的文本,这将不起作用。 :-(

使用 std::wcout 代替 std::cout

 wcout << ru << endl << en;

原文由 Nate 发布,翻译遵循 CC BY-SA 2.5 许可协议

方法是将 UTF-16 LE(默认 Windows 编码)转换为 UTF-8,然后打印到控制台( chcp 65001 首先,将代码页切换为 UTF-8)。

将 UTF-16 转换为 UTF-8 非常简单。如果您需要超过 2 个字节的字符, 请使用此页面作为指南

 short* cmd_s = (short*)cmd;
while(cmd_s[i] != 0)
{
    short u16 = cmd_s[i++];
    if(u16 > 0x7F)
    {
        unsigned char c0 = ((char)u16 & 0x3F) | 0x80; // Least significant
        unsigned char c1 = char(((u16 >> 6) & 0x1F) | 0xC0); // Most significant
        cout << c1 << c0; // Use Big-endian network order
    }
    else
    {
        unsigned char c0 = (char)u16;
        cout << c0;
    }
}

当然,您可以将它放在一个函数中并扩展它以处理更宽的字符(对于西里尔文应该足够了),但我想展示基本算法,并证明它一点也不难,你不需要任何库,只需几行代码。

原文由 ScienceDiscoverer 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题