如何使用Qt从文件中读取UTF-8文本

How to read UTF-8 text from file using Qt?

本文关键字:读取 UTF-8 文本 文件 何使用 Qt      更新时间:2023-10-16

我从文件中读取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"

我应该用什么?

参见QTextStream::setCodec():

in.setCodec("UTF-8");

你应该这样做:

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 
}

当读取QXmlStreamReader的XML文件时,我也有????。我通过在读取文件之前调用这个来修复它:

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