我对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-Í─▄▀
我忽略了一些愚蠢的事情吗?谢谢!
答案 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字符在其他非控制台输出中正确显示。谢谢大家!