如何阻止在getline字符串C++的开头读取奇怪的符号

How to stop strange symbols from being read in the beginning of a getline string C++?

本文关键字:开头 读取 符号 C++ 何阻止 getline 字符串      更新时间:2024-09-23

我有一个从.txt文件导入字符串的函数,但当我使用getline导入时,第一个字符串会显示为前面附加了3个奇怪的符号。每隔一根绳子都很好。

我不知道是不是文件本身,但我试着制作了一个新文件,它仍然读取奇怪的符号。

我用不同的.txt文件中的不同数据(静态字符串(尝试了一个类似的函数,但我根本没有奇怪的符号。

void SavagePlants::importInfo(std::fstream& importFile)
{
plants = new PlantCare[numPlants];
int i = 0;
while (getline(importFile >> std::ws, plants[i].species, '#')) {
getline(importFile, plants[i].sunlight, '#');
wrapText(plants[i].sunlight);
getline(importFile, plants[i].water, '#');
wrapText(plants[i].water);
getline(importFile, plants[i].temperature, '#');
wrapText(plants[i].temperature);
getline(importFile, plants[i].soil, '#');
wrapText(plants[i].soil);
getline(importFile, plants[i].fertilizer, '#');
wrapText(plants[i].fertilizer);
getline(importFile, plants[i].dormancy, '#');
wrapText(plants[i].dormancy);
++i;
}
}

这就是第一个字符串的输出:

╗┐Temperate Sundew

您的文本文件以UTF-8 BOM(0xEF 0xBB 0xBF(开头。您需要:

  • 在不存在BOM的情况下创建UTF-8文本文件。

  • 在读取文件的其余部分之前,只需跳过这些字节。

  • imbue()fstream中的UTF-8语言环境,它知道如何识别和忽略这些字节。