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