C++,getline() 无法正确加载所有字符

C++, getline() cant properly load all characters

我的文本文件中填充了与这些类似的字符:

¶§čç†8,ĄyŚ}¦PÜĎY®Všw†inmĘkÚhíU”*Q–­Ö}W"ĄőK=Ć“7ßńĎ_0§ĄŚĆš‰ö¤˝†’?šŕý  
î7ź®xż¶¸tÔuYÖa7Ź+6cE#U+:ç˛ů€°6%·˝Î÷Ľm‹¶ĺ¬‰,Y¤r$Ň“üDGhô‚J°ÜYŽäóa·7¶1Ľľ˝.—
bőľaŇ•Ďűż3«ű4°JT.ń¨kŢ&Ś6ÄmĆŕY0Ż/´~9.źÍéşď®ŁýçľURíOQS ›iJ±bĄB“˝¸&§řőUdüió^˛l˛
\›¨úlu+ĆŃSÔPÖDő±Qf6Ö\yÁ17$ŘĆMńŻß:g’×@ř–äy§_ĺąFsMWÓ‰5@Zݱ˝BvÓᯍ’;F¦jąÔî/ż/Ă

而且有近百行。当你在记事本中打开一些图像时,它基本上是一样的混乱。

我的任务是在该文件中找到一些隐藏的单词,例如:"apple"、"car" 等。我得到的是:

ifstream buffer;
buffer.open("myFile.txt");

string str1;

while(getline(buffer, str1)){

if(str1.find("apple")!=std::string::npos)
            counter++;

if(str1.find("car")!=std::string::npos)
            counter++;

}

当我打开包含 "normal" 个字符的文件时,它工作正常,但只要有那些不寻常的字符,getline() 就无法加载整行。

我将这一行添加到那个循环中:

myOutputFile << str1;

为了确保 getline 是否正确加载所有行,但在我的测试输出文件中只写了来自 cca 200 的 +-30 行。我也尝试了 get() 函数,但结果是一样的。似乎有一些字符 get/getline 无法处理并强制它停止加载下一个 characters/lines。

所以我的问题是:有什么方法可以强制 getline 处理这种情况,或者通常有什么方法可以在这种奇怪的字符中找到特定的单词?

谢谢。


已解决:

我已经以二进制模式打开该文件,现在可以正常工作了。

buffer.open("myFile.txt", ios::binary);

非常感谢干杯和hth。 - 阿尔夫

在 Windows 中,按惯例,Ctrl Z (ASCII 26) 表示文本结束。

为避免这种情况,请以二进制文件打开文件。

或使用较低级别的二进制文件i/o。