wcin得到错误的字符输入?

时间:2013-02-12 12:01:29

标签: c++ unicode console-application

以下代码:

#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控制台应用程序的标准做法使用,并且可以重复使用。

有什么想法吗?

2 个答案:

答案 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