为了说明我的问题,我会给你一个例子:
我有 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
因此可以正常工作。QString
TextStreams
提前致谢。