GetComputerName()未在Windows控制台中正确显示Unicode

时间:2016-04-10 03:23:08

标签: c++ unicode

我对C ++中的WinAPI编程比较陌生。我正在尝试编写一个程序,使用GetComputerName()获取系统主机名。理想情况下,我希望代码能够在英语和非英语系统上工作。以下是我正在使用的代码:

int main()
{
    wstring hostname;
    wchar_t nbtName[MAX_COMPUTERNAME_LENGTH + 1];
    DWORD length = MAX_COMPUTERNAME_LENGTH + 1;
    GetComputerName(nbtName, &length);
    hostname = nbtName;

    wcout << hostname << endl;

    return 0;
}

该代码在我的英文Windows 7系统上运行正常,但代码似乎无法在我的德语Windows 7系统(使用德语字符作为主机名)上正确显示。我认为wstring和wchar_t可以处理这些特殊字符。这是我德国Windows 7系统上显示的内容。

COMPUTER-Í─▄▀

我忽略了一些愚蠢的事情吗?谢谢!

2 个答案:

答案 0 :(得分:3)

使用_setmode(_fileno(stdout), _O_U16TEXT)在控制台窗口中显示Unicode:

#include <iostream>
#include <string>
#include <io.h> //for _setmode
#include <fcntl.h> //for _O_U16TEXT

int main()
{
    _setmode(_fileno(stdout), _O_U16TEXT);
    std::wcout << L"ελληνικά\n";
    return 0;
}

或使用MessageBoxW(0, hostname.c_str(), 0, 0)OutputDebugStringW查看正确显示的Unicode文字:

答案 1 :(得分:0)

Windows控制台输出是罪魁祸首。 Unicode字符在其他非控制台输出中正确显示。谢谢大家!