Qt и UTF-8: странное поведение
Чтобы проиллюстрировать мою проблему, я приведу пример:
У меня есть 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
отлично работает
Заранее спасибо.
1 ответ
Решение
Это не ответ на вопрос, почему это происходит, но делает
for (int i = 0; i < qv.size(); ++i)
{
//Debugging output
qDebug() << qv[i].toUtf8();
out << qv[i] << "\n";
}
кажется, это исправить.