私の問題を説明するために、例を示します。
UTF-8でエンコードされたテキストファイルがあります。
in.txt
:
ąśćź
ąś
ŻźŹ
このプログラムは1in.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
動作します。
前もって感謝します。