Russian Qt Forum
Ноябрь 23, 2024, 05:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTextStream и русские строки  (Прочитано 14864 раз)
Я.К.
Гость
« : Ноябрь 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";

}

Записан
spirit
Гость
« Ответ #1 : Ноябрь 11, 2008, 18:22 »

поробуйте так
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("cp-1251"));
....
или
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("cp-866"));
....
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #2 : Ноябрь 11, 2008, 18:46 »

Также обрати внимание на метод

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

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Я.К.
Гость
« Ответ #3 : Ноябрь 11, 2008, 20:03 »

я сделал qout.setCodec("UTF-16"). Русские буквы стали печататься, НО:

о н и  с т а л и    п е ч а т а т ь с я    ч е р е з    п р о б е л,   в р а з р я д к у.
Почему?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #4 : Ноябрь 11, 2008, 20:32 »

2 Я.К., тут две кодировки важны:
1) та в котрой у тебя строка записана, т.е. кодировка текстового редактора
2) та в которой в консоль выводишь
Записан

Юра.
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Ноябрь 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;
}
« Последнее редактирование: Ноябрь 11, 2008, 20:44 от lit-uriy » Записан

Юра.
mikemorgunov
Гость
« Ответ #6 : Ноябрь 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();
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.049 секунд. Запросов: 23.