Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: Я.К. от Ноябрь 11, 2008, 18:13



Название: QTextStream и русские строки
Отправлено: Я.К. от Ноябрь 11, 2008, 18:13
Нужно выводить через QTextStream на консоль Windows русские строки. Как это сделать?
простая setlocale не помогает.
пробовал поиграться с QTextCodec'ом, но тоже что-то ничего не вышло.
Как с этим бороться?

Код:
#include <QtCore/QCoreApplication>
#include <QTextStream>


#include <iostream>
using namespace std;

int main(int argc, char *argv[])

{
setlocale(LC_ALL, "russian");

QTextStream qin(stdin);
QTextStream qout(stdout);

cout << "C:русская строка\n";
qout << "Q:русская строка\n";

}



Название: Re: QTextStream и русские строки
Отправлено: spirit от Ноябрь 11, 2008, 18:22
поробуйте так
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("cp-1251"));
....
или
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("cp-866"));
....


Название: Re: QTextStream и русские строки
Отправлено: pastor от Ноябрь 11, 2008, 18:46
Также обрати внимание на метод

Цитировать
void QTextStream::setCodec ( QTextCodec * codec )


Название: Re: QTextStream и русские строки
Отправлено: Я.К. от Ноябрь 11, 2008, 20:03
я сделал qout.setCodec("UTF-16"). Русские буквы стали печататься, НО:

о н и  с т а л и    п е ч а т а т ь с я    ч е р е з    п р о б е л,   в р а з р я д к у.
Почему?


Название: Re: QTextStream и русские строки
Отправлено: lit-uriy от Ноябрь 11, 2008, 20:32
2 Я.К., тут две кодировки важны:
1) та в котрой у тебя строка записана, т.е. кодировка текстового редактора
2) та в которой в консоль выводишь


Название: Re: QTextStream и русские строки
Отправлено: lit-uriy от Ноябрь 11, 2008, 20:42
пример:
pro-файл
Код:
TEMPLATE = app
TARGET = test
SOURCES +=  main.cpp
CONFIG += console
Qt -= qui
файл main.cpp
Код:
#include <QtCore>

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

// Для функций перевода tr(), кодировка текстового редактора
QTextCodec::setCodecForTr(QTextCodec::codecForName("CP-1251"));
// Кодек для консоли
QTextCodec *concodec = QTextCodec::codecForName("CP-866");
QTextStream out(stdout);
QDateTime now;
QString s;

out.setCodec(concodec);
now = QDateTime::currentDateTime();
s = QObject::tr("Сейчас ") + now.toString("dd.MM.yyyy  hh:mm:ss.zzz");
out << s << endl;

return 0;
}


Название: Re: QTextStream и русские строки
Отправлено: mikemorgunov от Ноябрь 11, 2008, 21:19
2 Я.К.
В дополнение.У меня в SUSE так работает:
Код:
#include <QtCore/QCoreApplication>
#include <QApplication>
#include <QTextStream>
#include <QTextCodec>

#include <iostream>
using namespace std;

int main(int argc, char *argv[])

{
        QApplication app(argc,argv);
        QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
        //setlocale(LC_ALL, "russian");

        QTextStream qin(stdin);
        QTextStream qout(stdout);

        cout << "C:русская строка\n";
        qout << QObject::tr("Q:русская строка\n");

        return 0;
        return app.exec();
}