C++ wcin正在将eof读取为C++;如果使用标准重定向来重定向输入
我的控制台应用程序中有以下代码C++ wcin正在将eof读取为C++;如果使用标准重定向来重定向输入,c++,unicode,C++,Unicode,我的控制台应用程序中有以下代码 std::cout << "\nEnter Id: "; std::cout.flush(); std::wcin >> inId; std::cout << "\nEnter Secret: "; std::cout.flush(); std::wcin >> inSecret; std::cout>inId; std::cout>昆虫; 如果我从控制台读取输入
std::cout << "\nEnter Id: ";
std::cout.flush();
std::wcin >> inId;
std::cout << "\nEnter Secret: ";
std::cout.flush();
std::wcin >> inSecret;
std::cout>inId;
std::cout>昆虫;
如果我从控制台读取输入,我得到的是正确的输入。但是,如果我从一个文本文件重定向输入,我得到的是空(EOF)值。
对于MBCS来说,它正如期工作。我不知道UNICODE中发生了什么。有人能帮我吗?提前感谢您重定向文件的内容是什么?它的编码是什么?文件有以下sam xys27hdeo87编码是utf-8可能这里有一些东西给你一些想法:“编码是utf-8”-
std::wcin
无法读取utf-8中的输入。改为使用std::cin
,或者使用单独的std::istream
,它以二进制模式连接到平台的控制台API,然后根据需要读入并从UTF-8转换为UTF-16/32(取决于wchar的大小)。这意味着您必须首先检测STDIN是否被重定向,然后相应地从中读取。做重定向检测是特定于平台的,但是,标准C++中没有任何东西可以帮助它。