相关疑难解决方法(0)

使用std :: wofstream写入文件.该文件仍然是空的

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

#include <fstream>
int main()
{
    std::wofstream fout("myfile");
    fout << L"???????? ?????? Österreich ?????? ????" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译它时,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";
    }
}
Run Code Online (Sandbox Code Playgroud)

建造它.跑吧.并且...控制台清楚地读到了,令我惊讶的是:"之后:不好......".所以我编辑了我的帖子以提供新的信息,并开始等待答案,这可以解释为什么这是我能做什么.:)

c++ windows encoding visual-studio wofstream

13
推荐指数
2
解决办法
1万
查看次数

cout << setw与åäö没有正确对齐

以下代码重现了我的问题:

#include <iostream>
#include <iomanip>
#include <string>

void p(std::string s, int w)
{
   std::cout << std::left << std::setw(w) << s;
}

int main(int argc, char const *argv[])
{
   p("COL_A", 7);
   p("COL_B", 7);
   p("COL_C", 5);
   std::cout << std::endl;
   p("ABC", 7);
   p("ÅÄÖ", 7);
   p("ABC", 5);
   std::cout << std::endl;
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

这会产生以下输出:

COL_A  COL_B  COL_C
ABC    ÅÄÖ ABC
Run Code Online (Sandbox Code Playgroud)

如果我将代码中的"ÅÄÖ"更改为例如"ABC",那么它的工作原理如下:

COL_A  COL_B  COL_C
ABC    ABC    ABC  
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

c++ character-encoding iomanip c++11

10
推荐指数
2
解决办法
850
查看次数