我如何扫描外来字符(如 ä、ß、ő、ű)并将它们也打印到控制台 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;
}
这是我的简化代码。我想扫描用户输入的字符并在下一行打印它们。显然,非英文字符会出现一些问题。在程序中,我应该使用德语字母,如 ä、ö、ü 和 ß,以及其他一些字母(á、ë、é、í、ő、ű)。
我已尝试通过多种方式解决问题。我试图插入行
setlocale(LC_ALL, "German");
以便至少扫描和打印德文字符。它根本不起作用:由于某种原因,getline 似乎不接受输入的字符。
然后我用
替换了 getlinestd::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;
}