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

C++ 如何使用Qt从文件中读取UTF-8文本?,c++,qt,utf-8,filestream,C++,Qt,Utf 8,Filestream,我在从文件中读取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())

我在从文件中读取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;
    }
}
输出:

"jka si" 
"limak" 
"nieyca"
我应该使用什么?

请参阅:

你应该做:

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 
}
QTextStream在(&file)中;
in.setCodec(“UTF-8”);//将文件编解码器更改为UTF-8。
而(!in.atEnd())
{
QString line=in.readLine();

qDebug()在使用
QXmlStreamReader
读取XML文件时,我也有
。在读取文件之前,我通过调用此命令修复了此问题:

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

我试过了,现在所有的非ASCII字符都被替换为“?”。也许你的qDebug输出控制台不支持这些字符。这可能是“?”的合理来源。试着在QLabel屏幕上显示字符串。这不是问题。dDebug()你确定你的输入文件实际上是UTF-8?4个文本编辑器(Geany、jEdit、gedit、Kate)假设它是UTF-8。我仍然对“?”有问题。在它之后,我得到:“j?ka?si?”“limak”“?nie?yca”您的默认语言环境是什么?If
qDebug()
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 
}
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));