作为一项练习,我正在组建一个简单的词汇训练师。我正在阅读的文件包含词汇表,其中还包括äöü等特殊字符。
然而,我一直在努力阅读这个文件,而不会受到损坏的字符而不是相应的特殊字符。
我理解为什么会这样,但不知道如何正确解决它。
这是我的尝试:
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或其他东西,但为了使我的parse函数能够工作,它获取的字符串需要表示文件中的一行。因此,将整个缓冲区读成字符串不会起作用,除非我自己进行分离。
如何逐行正确,整齐地读取utf-8文件?
注意:我在这里寻找其他文章,但大多数都使用getline或只是解释原因而不是如何解决它。