c++ - 使用 std::wofstream 写入文件。该文件仍然是空的

标签 c++ windows visual-studio encoding wofstream

我使用VS2008编写了以下程序:

#include <fstream>
int main()
{
    std::wofstream fout("myfile");
    fout << L"Հայաստան Россия Österreich Ελλάδα भारत" << std::endl;
}

当我尝试编译它时,IDE 询问我是否想以 unicode 格式保存我的源文件,我说“是的,请”。
然后我运行程序,myfile 出现在我的项目文件夹中。我用记事本打开它,文件是空的。我记得记事本只支持 ASCII 数据。我用写字板打开它,它仍然是空的。最后,我内心的小天才敦促我查看文件大小,毫不奇怪它是 0 字节。所以我重建并重新运行程序,没有效果。最后,我决定在 StackOverflow 上向非常聪明的人询问我缺少什么,我在这里:)

已编辑:

在上述聪明人发表了一些意见后,我决定听从他们的建议,将程序改写成这样:

#include <fstream>
#include <iostream>
int main()
{
    std::wofstream fout("myfile");
    if(!fout.is_open())
    {
        std::cout << "Before: Not open...\n";
    }
    fout << L"Հայաստան Россия Österreich Ελλάδα भारत" << std::endl;
    if(!fout.good())
    {
        std::cout << "After: Not good...\n";
    }
}

build 它。跑了。而且......控制台清楚地显示,令我惊讶的是:“之后:不好......”。 所以我编辑了我的帖子以提供新信息,并开始等待答案来解释为什么会这样以及我能做什么。 :)

最佳答案

MSVC 提供 codecvt_utf8这个问题的语言环境方面。

#include <codecvt>

// ...  
std::wofstream fout(fileName);
std::locale loc(std::locale::classic(), new std::codecvt_utf8<wchar_t>);
fout.imbue(loc);

关于c++ - 使用 std::wofstream 写入文件。该文件仍然是空的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3950718/

相关文章:

visual-studio - 如何在#light 模式下在 Visual Studio 2008 中缩进 F# 代码

c# - 隐藏 C# XML 文档

包含 shared_ptr 的 std::list 的 C++ 重载 []

c++ - 使用删除使我的计算机崩溃

c++ - 存储可变数量变量的最佳方法是什么?

windows - Windows 上的同居 Docker 和 VirtualBox

c++ - STL 中 boost::upgrade_to_unique_lock 的等价物是什么?

windows - stdio 的 printf 和 Windows 驱动程序

linux - 使用 Bash 关闭 Windows 网络

.net - IIS Express applicationHost.config 文件包含无效条目,必须先更正才能打开项目