2

以下代码:

#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 控制台应用程序的标准做法,尽可能简单且可重现。

有任何想法吗?

4

2 回答 2

4

wcinTestwchar_t长度为 1 的缓冲区;

当你读入它时,你会溢出它。使用std::wstring欧洲工商管理学院。

于 2013-02-12T12:14:28.023 回答
2

这终于奏效了:

#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;
}

我太新手了,不明白为什么我需要SetConsoleOutputCPSetConsoleCP。我虽然可能只是 SetConsoleCP 可以解决所有问题,但不,我需要两者:SetConsoleOutputCP fixed cout;和SetConsoleCP固定cin

无论如何谢谢@StoryTeller

于 2013-02-12T22:28:33.603 回答