如何扫描外来字符(如ä,ß,ő,ű)并将其打印到控制台窗口?

时间:2015-07-17 16:59:46

标签: c++ windows unicode getline

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

我试图以多种方式解决问题。我试图插入行

setlocale(LC_ALL, "German");

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

然后我用

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

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

有趣的是,如果没有setlocale,getline似乎运行良好并且精确地回馈我输入的字符。但是,std :: wcout不能很好地显示以下内容:“解决方案(使用äëáéíöüűűß):”。然后,一旦我在setlocale行中写道,getline就会变得疯狂,但是“解决方案(使用äëáéíöüűűß):”现在可以正确打印。

我应该如何修改代码以满足这些期望? 如果可能具有重要性,我会使用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;
}

1 个答案:

答案 0 :(得分: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;
}