В качестве упражнения я делаю простой словарный тренажер.Файл, который я читаю, содержит словарь, который также содержит специальные символы, такие как, например, äöü.
Однако я изо всех сил пытался прочитать этот файл, не получая искалеченных символов вместо подходящих специальных символов.
Я понимаю, почему это происходит, но не как правильно ее решить.
Вот моя попытка:
Unit(const char* file)
:unitName(getFileName(file),false){
std::wifstream infile(file);
std::wstring line;
infile.imbue(std::locale(infile.getloc(), new std::codecvt_utf8<wchar_t, 0x10ffff, std::consume_header>()));
while (std::getline(infile, line))
{
std::wcout<<line.c_str()<<"\n";
this->vocabulary.insert(parseLine(line.c_str(),Language::EN_UK,Language::DE));
}
}
Процесс чтения останавливается, как только достигается запись, содержащаяспециальный символ.
Я даже смог немного изменить код, чтобы увидеть, где именно он перестает читать:
while (infile.eof()==false)
{
std::getline(infile, line);
std::wcout<<line.c_str()<<"\n";
this->vocabulary.insert(parseLine(line.c_str(),Language::EN_UK,Language::DE));
}
Если я делаю это так, цикл выводазапись со специальным символом, но перестает выводить ее прямо перед тем, как специальный символ будет выглядеть следующим образом:
Instead of:
cross-class|klassenübergreifend
It says:
cross-class|klassen
cross-class|klassen
cross-class|klassen
cross-class|klassen
.
.
.
это заставляет меня поверить, что специальный символ неправильно интерпретируется как конец строки в getline.
Мне все равно, нужно ли мне использовать getline или что-то еще, но для того, чтобы моя функция разбора работала,полученная строка должна представлять строку в файле.Поэтому чтение всего буфера в строку не будет работать, если я сам не выполню разделение.
Как правильно и аккуратно читать файл utf-8 построчно?
ПримечаниеЯ искал другие статьи здесь, но большинство из них либо используют getline, либо просто объясняют, почему, но не как это решить.