以下代码:
#include <iostream>
using std::wcin;
using std::wcout;
using std::locale;
int main()
{
locale::global(locale("Portuguese_Brazil"));
wcout << "wcin Test using \"ção\": "; // shows that wcout works properly
wchar_t wcinTest[] = L"";
wcin >> wcinTest;
wcout << wcinTest << " should be \"ção\".";
return 0;
}
结果:
wcin Test using "ção": ção
╬Æo should be "ção".
╬字符为U + 2021或8225,ç为U + 00E7或231。
我更改了多字节选项,设置并且未在项目属性中设置UNICODE。没有任何效果。
我已经将控制台字体设置为Consolas,这是一种能够正确显示ç字符的真实字体。
我希望这可以作为未来UNICODE控制台应用程序的标准做法使用,并且可以重复使用。
有什么想法吗?
答案 0 :(得分:4)
wcinTest
是长度为1的wchar_t
缓冲区;
当你读到它时,你会溢出它。使用std::wstring
insead。
答案 1 :(得分:1)
这终于奏效了:
#include <iostream>
#include <string>
#include <Windows.h>
using std::cin;
using std::cout;
using std::string;
int main()
{
SetConsoleOutputCP(1252);
SetConsoleCP(1252);
cout << "wcin Test using \"ção\": "; // shows that wcout works properly
string wcinTest;
cin >> wcinTest;
cout << wcinTest << " should be \"ção\".";
return 0;
}
我太新手了解为什么我需要 SetConsoleOutputCP 和 SetConsoleCP 。我可能只是SetConsoleCP会解决所有问题,但不,我需要两个: SetConsoleOutputCP 修复 cout ;和 SetConsoleCP 已修复 cin 。
非常感谢@StoryTeller