Как прочитать текст UTF-8 из файла, используя Qt? - PullRequest
13 голосов
/ 12 апреля 2011

У меня проблемы с чтением текста в кодировке UTF-8 из файла. Моя версия читает только символы ASCII.

#include <QtCore>

int main()
{
    QFile file("s.txt");

    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        return -1;
    }

    QTextStream in(&file);
    while(!in.atEnd())
    {
        QString line = in.readLine();
        qDebug() << line;
    }
}

s.txt:

jąkać się
ślimak
śnieżyca

Выход:

"jka si" 
"limak" 
"nieyca"

Что мне использовать?

Ответы [ 3 ]

20 голосов
/ 12 апреля 2011

См. QTextStream::setCodec():

in.setCodec("UTF-8");
6 голосов
/ 12 апреля 2011

Вы должны сделать:

QTextStream in(&file);
in.setCodec("UTF-8"); // change the file codec to UTF-8.

while(!in.atEnd())
{
    QString line = in.readLine();
    qDebug() << line.toLocal8Bit(); // convert to locale multi-byte string 
}
1 голос
/ 20 декабря 2016

У меня также было ???? при чтении файла XML с QXmlStreamReader. Я исправил это, вызвав это перед чтением файла:

QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
...