在编写程序时,我遇到了std::ofstream
的奇怪行为。请参阅以下代码
ofstream dire;
dire.open("dir.txt", std::ios::out);
// some other code
for(int i=0;i<dir.size();i++)
{
dire << dir[i] << "\t"; // dir is integer vector containing values between 0-9
}
现在,当我打开dir.txt
时,内容是:
ऴऴऴऴवववववववववशशशशशशशशशशषषषषषषषषरररररररऱऱऱऱऱऱऱऱऱललललललललललललळ.. and so on
如果我给出一个空格,然后选项卡(\ t),那么它可以正常工作或者那个问题\ n也可以正常工作。 dire << dir[i] << " \t";
现在的输出是:
4 4 4 4 5 5 5 5 5 5.. and so on
我还尝试dire.flush()
将输出缓冲区刷新到文件,但结果仍然相同。
我绝对可以通过\t
逃脱,但我想了解为什么会这样。
答案 0 :(得分:6)
如果您使用记事本查看该文件,那么错误Bush hid the facts可能就是问题。
当字符串传递给Win32字符集检测函数IsTextUnicode而没有其他字符时,会发生错误。 IsTextUnicode看到它认为有效的UTF-16LE中文并返回true,然后应用程序错误地将文本解释为UTF-16LE。