C++ FileIO 奇怪的行为

C++ FileIO weird behaviour

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

如果我给出 space 然后 tab(\t) 那么它可以正常工作或者就此而言 \n 也可以正常工作。 dire << dir[i] << " \t";

现在输出是:

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

我也试过dire.flush()将输出缓冲区刷新到文件,但结果还是一样。

我绝对可以通过使用 \t 逃脱,但我想了解为什么会这样。

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

The bug occurs when the string is passed to the Win32 charset detection function IsTextUnicode with no other characters. IsTextUnicode sees what it thinks is valid UTF-16LE Chinese and returns true, and the application then incorrectly interprets the text as UTF-16LE.