从哪里获得_fileno和_O_U16TEXT?

问题描述 投票:0回答:2

我试图打印文本“Ääkkösiäruutuun。”用C ++到控制台。我有Windows 7和正在使用的代码::块编辑器。搜索关于这个问题,我发现,也许这些类型的线,将有助于

_setmode(_fileno(stdout), _O_U16TEXT);
wstring s{L"Ääkkösiä ruutuun."};
wcout<<s<<endl;

但是,当我尝试编译它,我得到的错误:_fileno没有在这个范围内声明。

我有所有这些包括:

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <stdexcept>
#include <cmath>
#include <sstream>
#include <fstream>
#include <codecvt>
#include <locale>
#include <fcntl.h>
#include <io.h>
#include <stdio.h>
#include <cstdio>
#include <ostream>

我缺少什么?

另外,我想另一件事是语言环境,但随后区域设置::空没有被发现!为什么我的C ++有它什么?

编辑这里是什么我的程序现在正在做的图片。

它打印出只是第一个字母(A)。发生了什么休息?

Ääkkösiä ruutuun, perkele!

好吧,这似乎setmode设置,这样只有一个字母被打印出来。 (即便要打印与多个命令正常文本,只是导致一个字母)。如果没有它的斯堪的纳维亚字母打印不正确,思想。他们是这样的:

enter image description here

c++ windows console-application utf scandir
2个回答
1
投票

你找到了答案是Visual Studio中,没有代码::块。

而C标准规定又该在<stdio.h>,它只规定了最低限度。实现者可以添加自己的职能,而且应该这样做使用_(下划线前缀)。这就是为什么你不应该使用前缀。你不知道你会打破什么。微软使用正确的前缀清楚地表明他们的非标准扩展。

答案被标记C ++,但C ++从C.继承<stdio.h>的内容


-1
投票

该生产线

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

从文件(UTF-8)的文本内容仍不能正常打印,虽然。它应该是

您好! 在这里,有两条线。

A的出差错那里。

输出:

output with LC_TYPE_OCP

© www.soinside.com 2019 - 2024. All rights reserved.