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

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

本文关键字:窗口 控制台 打印 扫描 何扫描 字符      更新时间:2023-10-16

下面是我的简化代码。我想扫描用户输入的字符,然后在下一行打印出来。显然,非英语字符会出现一些问题。在程序中,我应该使用德语字母,如ä, ö, ü和ß,以及其他一些字母(, ë, , í,布达佩斯,布达佩斯)。

我已经尝试用很多方法来解决这个问题。我试图插入

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