Я изучаю Qt с Qt5.1, и у меня есть проблемы с кодированием в акцентуации. Я пишу программы с выходами на португальском языке и всегда должен использовать акценты. Проблема может быть продемонстрирована в следующем коде:
\#include < QDebug>
\#include < QTextStream>
\#include < QString>
int main(){
QTextStream out(stdout);
qDebug() << "Olá Mundo!";
out << QString("Olá Mundo!") << endl;
out << "Olá Mundo!" << endl;
}
Выход:
Ола Мундо!
Ола Мундо!
Ол Мундо!
Эта третья «Ола Мундо» не так. Мне всегда нужно использовать QString для правильной печати вывода, или есть какой-то способ, чтобы последняя строка была напечатана правильно (без объявления Qstring)? И почему qDebug показывает правильно?
Вы можете установить кодек для ISO 8859-1 (out.setCodec("ISO 8859-1")
).
Тогда вы можете написать out << "Olá Mundo!" << endl;
Но потом out << QString("Olá Mundo!") << endl;
больше не будет работать Это просто потому, что оператор QTextStream<<(const char * string) ожидает строку в ISO 8859-1 и оператор<<(const QString & string) QString в UTF-8. Кодеком по умолчанию для QTextStream является UTF-8.
qDebug внутренне преобразует строку в UTF-8. Вот почему вы можете написать qDebug() << "Olá Mundo!";
Других решений пока нет …