我如何扫描外来字符(如 ä、ß、ő、ű)并将它们也打印到控制台 window?

How can I scan foreign characters (like ä, ß, ő, ű) and print them out to the console window as well?

这是我的简化代码。我想扫描用户输入的字符并在下一行打印它们。显然,非英文字符会出现一些问题。在程序中,我应该使用德语字母,如 ä、ö、ü 和 ß,以及其他一些字母(á、ë、é、í、ő、ű)。

我已尝试通过多种方式解决问题。我试图插入行

setlocale(LC_ALL, "German");

以便至少扫描和打印德文字符。它根本不起作用:由于某种原因,getline 似乎不接受输入的字符。

然后我用

替换了 getline
std::wcin >> myString;

但这也没什么用。输入 äëßö 后,我得到了这个:“÷á<.

有趣的是,如果没有 setlocale,getline 似乎可以正常工作并准确地返回我输入的字符。但是,std::wcout 不能很好地显示以下内容:"Solution (with äëáéíöüőűß): "。然后,只要我在 setlocale 行中写入,getline 就会变得疯狂,但 "Solution (with äëáéíöüőűß): " 现在可以正确打印。

我应该如何修改代码以满足这些期望? 如果这可能很重要,我会使用 Windows 平台。

提前致谢!

#include "stdafx.h"
#include <iostream>
#include <string>


int _tmain(int argc, _TCHAR* argv[])
{
    using namespace std;
    int iii = 1;
    do
    {
        std::wcout << "Type in a string (with äëáéíöüőűß) : " << endl;
        wstring myString;
        getline(std::wcin, myString);
        std::wcout << "Solution (with äëáéíöüőűß): " << myString << endl;

    } while (iii < 50);

    cin.get();
    return 0;
}

在进行任何输入或输出之前,您必须设置模式:

#include <iostream>
#include <string>
#include <io.h>
#include <fcntl.h>

int main()
{
    ::std::locale d_Locale2( "German" );
    ::std::locale::global( d_Locale2 );
    _setmode( _fileno( stdin ), _O_U16TEXT );
    _setmode( _fileno( stderr ), _O_U16TEXT );
    _setmode( _fileno( stderr ), _O_U16TEXT );

    ::std::wcout << L"Type in a string (with äëáéíöüőűß) : " << ::std::endl;
    ::std::wstring myString;
    ::std::getline( ::std::wcin, myString );
    ::std::wcout << L"Solution (with äëáéíöüőűß): " << myString << ::std::endl;

    return 0;
}