【问题标题】:C++ FileIO weird behaviourC++ FileIO 奇怪的行为
【发布时间】:2015-03-17 08:05:49
【问题描述】:

在编写程序时,我遇到了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

如果我给一个空格,然后 tab(\t) 那么它可以正常工作,或者 \n 也可以正常工作。 dire &lt;&lt; dir[i] &lt;&lt; " \t";

现在输出是:

4   4   4   4   5   5   5   5   5   5.. and so on

我还尝试dire.flush() 将输出缓冲区刷新到文件,但结果仍然相同。

我绝对可以使用\t 逃脱,但我想了解为什么会发生这种情况。

【问题讨论】:

  • 用十六进制编辑器打开dir.txt。你看到了什么?

标签: c++ file-io windows-8.1 ofstream


【解决方案1】:

如果您使用记事本查看文件,则错误Bush hid the facts 可能是问题所在。

当字符串被传递给 Win32 字符集检测函数 IsTextUnicode 而没有其他字符时会出现该错误。 IsTextUnicode 看到它认为是有效的 UTF-16LE 中文并返回 true,然后应用程序错误地将文本解释为 UTF-16LE。

【讨论】:

  • 这正是发生的事情, 在 UTF-16LE 中是 0x3409,恰好与单字节编码中的 4\t 相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-03
  • 2019-04-10
  • 2019-05-24
  • 2016-07-15
  • 2011-06-23
  • 2016-08-12
相关资源
最近更新 更多