freopen和fwprintf将不正确的宽字符写入TXT文件

时间:2017-04-27 17:56:22

标签: c++ variadic-templates

当使用freopen和fwprintf时,我已经花了一整天时间寻找关于UTF-8和UTF-16选项的答案,现在没有结果。我将在下面添加我的代码,也许有人可以提供帮助。提前谢谢。

template<typename... ArgsT>
void log(const wchar_t* message, ArgsT... args)
{
    fwprintf(stdout, message, args...);
    fwprintf(stdout, L"\n");
    fflush(stdout);
}

int main()
{
    bool init = true;
    if (!std::freopen("log.txt", "w", stdout))
    {
        init = false;
    }

    if (std::fwide(stdout, 1) <= 0)
    {
        init = false;
    }

    if (init)
    {
        std::wstring str = L"кирилиця";
        log(L"Some text in cyrillic %S and some number %i", str.c_str(), 10);
    }

    return 0;
}

作为TXT文件的结果我有:一些西里尔文:8 @ 8; 8FO和10号

1 个答案:

答案 0 :(得分:0)

您需要使用wchar_t(0xFEFF)启动文件。 它告诉文本编辑器应用程序将以下数据视为unicode。