我试图通过getline
函数或fileContents.assign( (istreambuf_iterator<char>(myFile)), (istreambuf_iterator<char>()));
将文件读入字符串
这两种方式都给了我上面的输出,如图所示。
第一种方式:
string fileContents;
ifstream myFile("textFile.txt");
while(getline(myFile,fileContents))
cout<<fileContents<<endl;
替代方式:
string fileContents;
ifstream myFile(fileName.c_str());
if (myFile.is_open())
{
fileContents.assign( (istreambuf_iterator<char>(myFile) ),
(istreambuf_iterator<char>() ) );
cout<<fileContents;
}
答案 0 :(得分:1)
文件以这些字符开头,很可能是BOM来告诉你文件的编码是什么。
您可能无法在Windows记事本中看到它们,因为记事本会隐藏编码字节。获得一个体面的文本编辑器,让你看到文件的二进制文件,你会看到这些字符。
答案 1 :(得分:0)
您的文件以UTF-8 BOM(字节0xEF 0xBB 0xBF
)开头。您正在按原样读取文件的原始字节,并将它们输出到使用codepage 437的OEM字体的显示器。要正确处理文本文件,尤其是Unicode编码的文本文件,您需要读取前几个字节,检查BOM(并且有several you can look for),如果检测到,则查找过去的BOM并解释剩余的字节指定编码中的文件,在本例中为UTF-8。