2

为了说明我的问题,我会给你一个例子:

我有 UTF-8 编码的文本文件。

in.txt

ąśćź
ąś
ŻźŹ

in.txt该程序逐行读取并产生重复的out.txt. 它不仅复制文件,还将其打印到控制台。最后,它QString使用与文件第一行相同的文本创建。

#include <QtCore>

int main()
{
    QVector<QString> qv;

    QFile file("in.txt");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
        return -1;

    QTextStream in(&file);
    in.setCodec("UTF-8");
    while (!in.atEnd())
    {
        QString line = in.readLine();
        qv.append(line);
    }

    QFile file2("out.txt");
    if (!file2.open(QIODevice::WriteOnly | QIODevice::Text))
        return -1;

    QTextStream out(&file2);
    out.setCodec("UTF-8");
    for (int i = 0; i < qv.size(); ++i)
    {
        //Debugging output
        qDebug() << qv[i];

        out << qv[i] << "\n";
    }

    // Important part!!!

    qDebug() << "Why?";
    QString s("ąśćź"); //same as the first line of file!

    qDebug() << s;
}

控制台输出是个谜:

"????" 
"??" 
"???" 
Why? 
"ąśćź"

out.txt: (复制)

ąśćź
ąś
ŻźŹ

为什么它首先打印“??????” 复制到控制台,然后在我将“ąśćź”硬编码到我的程序中时打印“ąśćź”?似乎是什么问题?它创建相同的副本,in.txt因此可以正常工作。QStringTextStreams

提前致谢。

4

1 回答 1

2

这不是为什么会发生这种情况的答案,而是做

for (int i = 0; i < qv.size(); ++i)
{
    //Debugging output
    qDebug() << qv[i].toUtf8();

    out << qv[i] << "\n";
}

似乎修复它。

于 2011-04-18T19:54:37.200 回答