Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从哪里获取文件号和文本? 我试着用C++来打印文本“EntaskkoSoSuRuutun”。我有Windows7,正在使用Code::Blocks编辑器。在这个主题上搜索,我发现也许这些文字会有所帮助 _setmode(_fileno(stdout), _O_U16TEXT); wstring s{L"Ääkkösiä ruutuun."}; wcout<<s<<endl; \u setmode(\u fileno(stdout),\u O\u U16TEXT); wstring s{L“Äkäsiäruutuun.”; wcout_C++_Windows_Console Application_Utf_Scandir - Fatal编程技术网

从哪里获取文件号和文本? 我试着用C++来打印文本“EntaskkoSoSuRuutun”。我有Windows7,正在使用Code::Blocks编辑器。在这个主题上搜索,我发现也许这些文字会有所帮助 _setmode(_fileno(stdout), _O_U16TEXT); wstring s{L"Ääkkösiä ruutuun."}; wcout<<s<<endl; \u setmode(\u fileno(stdout),\u O\u U16TEXT); wstring s{L“Äkäsiäruutuun.”; wcout

从哪里获取文件号和文本? 我试着用C++来打印文本“EntaskkoSoSuRuutun”。我有Windows7,正在使用Code::Blocks编辑器。在这个主题上搜索,我发现也许这些文字会有所帮助 _setmode(_fileno(stdout), _O_U16TEXT); wstring s{L"Ääkkösiä ruutuun."}; wcout<<s<<endl; \u setmode(\u fileno(stdout),\u O\u U16TEXT); wstring s{L“Äkäsiäruutuun.”; wcout,c++,windows,console-application,utf,scandir,C++,Windows,Console Application,Utf,Scandir,您找到的答案是针对VisualStudio的,而不是针对代码::块的 虽然C标准规定了中应该包含的内容,但它只规定了最小值。实现者可以添加他们自己的函数,并且应该使用(下划线前缀)这样做。这就是为什么不应该使用该前缀。你不知道你会打破什么。微软用正确的前缀清楚地表明了他们的非标准扩展 >答案是标记C++,但是C++继承了C.< /P> > P>中的 >代码>的内容。 虽然C标准规定了中应该包含的内容,但它只规定了最小值。实现者可以添加他们自己的函数,并且应该使用(下划线前缀)这样做。这就是为什

您找到的答案是针对VisualStudio的,而不是针对代码::块的

虽然C标准规定了
中应该包含的内容,但它只规定了最小值。实现者可以添加他们自己的函数,并且应该使用
(下划线前缀)这样做。这就是为什么不应该使用该前缀。你不知道你会打破什么。微软用正确的前缀清楚地表明了他们的非标准扩展


<> >答案是标记C++,但是C++继承了C.< /P> > P>中的<代码> >代码>的内容。 虽然C标准规定了
中应该包含的内容,但它只规定了最小值。实现者可以添加他们自己的函数,并且应该使用
(下划线前缀)这样做。这就是为什么不应该使用该前缀。你不知道你会打破什么。微软用正确的前缀清楚地表明了他们的非标准扩展

答案是标记C++,C++继承了C.< /P> <代码> > < > P>

setlocale(LC_CTYPE, ".OCP");
工作

一个完整的例子:

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <fstream>

using namespace std;

wstring readFile(const char* filename) {
    wifstream wif(filename);
    locale myLoc("");
    //locale utf8_locale(locale(), new gel::stdx::utf8cvt<true>);
    wif.imbue(myLoc);
    basic_stringstream<wchar_t> wss;
    wss << wif.rdbuf();
    return wss.str();
}

int main() {
    setlocale(LC_CTYPE, ".OCP");
    wstring contents = readFile("test.txt");
    wcout<<L"Does anything get printed out at all???"<<endl;
    //wcout <<contents<<endl;
    wstring s{L"Ääkkösiä ruutuun."};
    wcout<<s<<endl;
    wcout<<L"Näkyykö äkköset?"<<endl;
    return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
wstring读取文件(常量字符*文件名){
wifstream wif(文件名);
语言环境myLoc(“”);
//语言环境utf8_语言环境(locale(),new gel::stdx::utf8cvt);
wif.imbue(myLoc);
基本流wss;
wss

setlocale(LC_CTYPE, ".OCP");
工作

一个完整的例子:

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <fstream>

using namespace std;

wstring readFile(const char* filename) {
    wifstream wif(filename);
    locale myLoc("");
    //locale utf8_locale(locale(), new gel::stdx::utf8cvt<true>);
    wif.imbue(myLoc);
    basic_stringstream<wchar_t> wss;
    wss << wif.rdbuf();
    return wss.str();
}

int main() {
    setlocale(LC_CTYPE, ".OCP");
    wstring contents = readFile("test.txt");
    wcout<<L"Does anything get printed out at all???"<<endl;
    //wcout <<contents<<endl;
    wstring s{L"Ääkkösiä ruutuun."};
    wcout<<s<<endl;
    wcout<<L"Näkyykö äkköset?"<<endl;
    return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
wstring读取文件(常量字符*文件名){
wifstream wif(文件名);
语言环境myLoc(“”);
//语言环境utf8_语言环境(locale(),new gel::stdx::utf8cvt);
wif.imbue(myLoc);
基本流wss;

wss根据微软的说法,
\u fileno
是在
中定义的。根据IBM和其他公司的说法,它是
fileno
,没有定义下划线。我两个都试过了,都没有找到。顺便问一句,为什么在stdio中需要.h,因为例如在“#include?我想你需要看看你的开发环境是如何配置的。听起来你的include路径好像没有定义。至于
,前者是标准的,后者也应该可以。你不需要
fileno(stdout)
,这里有一个
stdout\u fileno
(通常等于1)位于
unistd.h
@Vovanium中,找到了。但是_O_U16TEXT呢?根据微软的说法,
\u fileno
是在
中定义的。根据IBM和其他公司的说法,它的
fileno
没有定义下划线。我两个都试过了,都没有找到。顺便问一下,为什么人们需要stdio中的.h,因为它不是nee例如在“#include?我想你需要看看你的开发环境是如何配置的。听起来你的include路径好像没有定义。至于
,前者是标准的,后者也应该可以。你不需要
文件号(stdout)
用于此。有一个
STDOUT\u FILENO
(通常等于1)位于
unistd.h
@Vovanium,找到了。但是_O_U16TEXT呢?它肯定坏了一些东西,因为它只打印了一个字母。谢天谢地,自从注释掉setmode调用后,它并没有永久性地恢复到乱七八糟的scandis,但至少它打印了所有内容。好吧,现在我正在尝试搜索一个code::Blocks solution。我只是不知道该用什么词。有人会认为这是一个只打印unicode内容的解决问题。@Ploos2:unicode人自己似乎正忙于添加表情符号。我不能完全责怪Microsoft或Code::Blocks。@Ploos2:如果你愿意设置Code::Blocks来使用mingw-w64工具链,你就必须
\u fileno
。或者,您可以自己定义它(检查备注中标记为重复的问题)。它肯定坏了一些东西,因为它只打印出一个字母。谢天谢地,这并不是永久性的,因为对setmode调用进行注释会将其还原回乱七八糟的scandis,但至少它打印了所有内容。好吧,现在我正试图搜索一个Code::Blocks解决方案。我只是不知道该使用什么词。人们会认为这是ju的一个解决问题st打印unicode内容。@Ploos2:unicode人自己似乎正忙于添加表情符号。我不能完全责怪Microsoft或Code::Blocks。@Ploos2:如果您愿意设置Code::Blocks来使用mingw-w64工具链,您将拥有\u fileno。或者,您可以自己定义它(检查备注至OP中标记为重复的问题)。这将您限制为OEM代码页,如果它与MSVC类似,则会对控制台输出代码页进行双重转换,这恰好也是OEM的默认设置。在这种情况下,只有Windows 10支持UTF-8,这是测试版,而不是默认配置。在Windows 7中,它将是一个传统代码页,对于非亚洲lo,限制为大约250个字符cales。如果您无法让C/C++库与控制台的Unicode API一起使用,您可以直接使用UTF-16LE文本调用
WriteConsoleW
setlocale()
所做的事情与您在问题中所做的完全不同。请参阅我的答案,以及我在您的问题中尽可能重复的问题。这将您限制为OEM代码页,如果它与MSVC类似,则控制台输出代码页会有双重翻译,这恰好也是默认的OEM代码页。只有Windows 10支持在本例中是UTF-8,这是测试版,不是默认配置。在Windows7中,它将是一个传统的代码页,限制在250个字符左右