为了说明我的问题,我会举个例子:
我有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
可以正常工作。
提前致谢。
答案 0 :(得分:2)
这不是为什么发生这种情况的答案,而是
for (int i = 0; i < qv.size(); ++i)
{
//Debugging output
qDebug() << qv[i].toUtf8();
out << qv[i] << "\n";
}
似乎解决了这个问题。