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です。

mult-bytesオプションを変更し、プロジェクトのプロパティでUNICODEを設定するか設定しないかを変更しました。何も機能しませんでした。

私はすでにコンソールフォントをConsolasに設定​​しました。これは、ç文字を正しく表示できるTrueTypeフォントです。

これを、将来の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 に答える