Пытаюсь создать консольное приложение:
#include <QCoreApplication>
#include <QTextStream>
#include <QTextCodec>
#include <conio.h>
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
QTextCodec *cyrillicCodec = QTextCodec::codecForName("CP1251"); // Пробовал "IBM-866", "UTF-8"
QTextCodec::setCodecForTr(cyrillicCodec);
QTextCodec::setCodecForLocale(cyrillicCodec);
QTextCodec::setCodecForCStrings(cyrillicCodec);
QTextStream in(stdin), out(stdout); // Нашел в интернете
out << "Русский текст" << '\n';
qDebug("Русский текст 2");
_getch();
return(0);
}
Появились следующие вопросы:текст исходника написан в кодировке "X"
кодировка консоли - "Y"
внутренняя кодировка QString - UTF-16
Следовательно должно быть преобразование от кодировки "X" к QString, а зитем из QString в "Y".
Обычно делается так, исходник пишется в UTF-8, а внём такой код
QTextStream out(stdout)
QTextCodec *outCodec = QTextCodec::codecForName("IBM866"); // кодировка консоли
out.setCodec(outCodec);
QString str = trUtf8("тестовая строка."); //из кодировки исходника будет преобразовано в UTF-16
out << str << endl; // т.к. кодек консоли задан явно, то str (в UTF-16) будет преобразован к кодировкеконсоли
У меня Ваш вариант:
QTextCodec *outCodec = QTextCodec::codecForName("IBM866");
out.setCodec(outCodec);
QString str = QObject::trUtf8("тестовая строка.");
out << str << endl;
не прошел, русские буквы отражаются неправильно. Получилось так: QTextCodec *cyrillicCodec = QTextCodec::codecForName("CP1251");
//QTextCodec *cyrillicCodec = QTextCodec::codecForName("UTF8");
QTextCodec::setCodecForTr(cyrillicCodec);
QCoreApplication a(argc, argv);
QTextStream in(stdin), out(stdout);
QTextCodec *outCodec = QTextCodec::codecForName("IBM866");
out.setCodec(outCodec);
QString str = QObject::tr("тестовая строка.");
out << str << endl;
Я работаю в Windows 7, может быть это из-за различия ОС?
У меня в параметрах Qcreator Кодировка файла по умолчанию стоит System, посмотрел в редакторе - кодировка файла ANSI (кодировка Windows). Так что, наверное, из-за этого. Если делать кроссплатформенное приложение, то нужно использовать UTF-8 (чтобы переносить в Linux) и Ваш код?
Т.е. я хотел сказать, что System нужно поменять в редакторе на UTF-8 и использовать Ваш код?
Я сделал так:
1. В настройках QCreator я установил в кодировке файла по умолчанию UTF8.
2. Перекодировал Штирлицем файл и поправил.
Правильный вывод получился при таком коде:
QTextCodec *cyrillicCodec = QTextCodec::codecForName("UTF8");
QTextCodec::setCodecForTr(cyrillicCodec);
QCoreApplication a(argc, argv);
QTextStream out(stdout);
QTextCodec *outCodec = QTextCodec::codecForName("IBM866");
out.setCodec(outCodec);
out << QObject::tr("Русский текст") << endl;
Теперь все правильно или я еще где-нибудь допустил ошибку?
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)