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

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

Страниц: 1 2 3 [4] 5 6   Вниз
  Печать  
Автор Тема: Вывод русских символов в консоль  (Прочитано 62656 раз)
8Observer8
Гость
« Ответ #45 : Сентябрь 19, 2014, 17:47 »

Как вывести название кодировки (или кодека) я нашёл:

Код
C++ (Qt)
 
#include <iostream>
#include <QTextCodec>
#include <QObject>
#include <QDebug>
 
#define STR(s) ((QTextCodec::codecForLocale()->fromUnicode(s)).constData())
 
int main()
{
   qDebug() << QTextCodec::codecForLocale()->name();
   std::cout << STR( QObject::tr( "Привет, Мир!" ) );
   return 0;
}
 

Записан
8Observer8
Гость
« Ответ #46 : Сентябрь 19, 2014, 17:50 »

CP1251 и windows-1251 - это одно и тоже?

Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #47 : Сентябрь 19, 2014, 17:55 »

CP1251 и windows-1251 - это одно и тоже?
Да. Только в виндах консоль досовская (IBM 866).
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
8Observer8
Гость
« Ответ #48 : Сентябрь 19, 2014, 18:02 »

Надо будет постепенно основательно разобраться с этим вопросом. Я уже запутался Улыбающийся

Вроде хорошая статья: ссылка

В ней есть ссыка на эту: Абсолютный Минимум, который Каждый Разработчик Программного Обеспечения Обязательно Должен Знать о Unicode и Наборах Символов
Записан
OKTA
Гость
« Ответ #49 : Сентябрь 19, 2014, 20:27 »

Возьми QTextStream и используй setCodec, что ты мучаешься?
Записан
8Observer8
Гость
« Ответ #50 : Сентябрь 19, 2014, 20:36 »

Возьми QTextStream и используй setCodec, что ты мучаешься?
Надо бы придумать, что-то простое и универсальное. Обёртку какую-нибудь. Чтобы не писать две версии ПО и чтобы можно было в консоль на русском выводить. Что такое "лингвист"?
Записан
OKTA
Гость
« Ответ #51 : Сентябрь 19, 2014, 21:15 »

Лингвист для этого и нужен, чтобы можно было писать программу, а потом переводить ее на какие хочешь языки.
Почитай http://habrahabr.ru/post/51319/
Записан
vizir.vs
Гость
« Ответ #52 : Сентябрь 22, 2014, 11:37 »

CP1251 и windows-1251 - это одно и тоже?

Только кодировка, которую показывает codecForLocale() и кодировка консоли вещи разные. Как узнать кодировку консоли в винде уже писалось ранее. По-любому есть что-то подобное и под линем. А через qt не факт что ты сможешь глянуть кодировку консоли (я не нашел).
Записан
OKTA
Гость
« Ответ #53 : Сентябрь 22, 2014, 11:59 »

Через qt и кодировку системы ты не узнаешь на прямую - codecForLocale выдаст тебе "System" и никак ты не узнаешь, что именно за кодировка это.
Записан
8Observer8
Гость
« Ответ #54 : Сентябрь 27, 2014, 11:13 »

В VS C++ достаточно написать вначеле программы:
Код
C++ (Qt)
setlocale(LC_ALL, "rus");
 
Неужели в Qt нет простого и красивого решения?
Записан
Bepec
Гость
« Ответ #55 : Сентябрь 27, 2014, 11:14 »

VS это IDE написанная под Windows. Конечно там всё будет Улыбающийся
Записан
8Observer8
Гость
« Ответ #56 : Сентябрь 27, 2014, 11:33 »

Придётся обёртки писать, чтобы примерно так выглядело:

Код
C++ (Qt)
#include "QCout.h"
#include "QCin.h"
 
int main()
{
   QCout qcout;
   QCin qcin;
 
   qcout << "Привет, Мир!" << qendl;
 
   return 0;
}
 
 
« Последнее редактирование: Сентябрь 27, 2014, 11:36 от 8Observer8 » Записан
8Observer8
Гость
« Ответ #57 : Октябрь 14, 2014, 09:29 »

Пока вот такую штуку для вывода сделал:

Код
C++ (Qt)
#include "QCout.h"
 
int main()
{
   QCout qcout;
 
   qcout.write( "Привет\n" );
 
   return 0;
}
 

QCout.h
Код
C++ (Qt)
#ifndef QCOUT_H
#define QCOUT_H
 
#include <string>
#include <QTextStream>
#include <QTextCodec>
 
class QCout
{
public:
   QCout()
   {
       m_cout = new QTextStream( stdout );
       m_codec = QTextCodec::codecForName( "CP866" );
       m_cout->setCodec( m_codec );
   }
 
   ~QCout()
   {
       delete m_cout;
   }
 
   void write( const std::string &text )
   {
       QString qstrText( text.c_str( ) );
       ( *m_cout ) << qstrText;
       ( *m_cout ).flush();
   }
 
private:
   QTextStream *m_cout;
   QTextCodec *m_codec;
};
 
#endif // QCOUT_H
 
« Последнее редактирование: Октябрь 14, 2014, 09:31 от 8Observer8 » Записан
vizir.vs
Гость
« Ответ #58 : Октябрь 14, 2014, 09:40 »

Строго говоря у виндовой консоли не обязательно кодировка Cp866. Ее легко можно сменить на любую другую.
Записан
8Observer8
Гость
« Ответ #59 : Октябрь 14, 2014, 09:48 »

Строго говоря у виндовой консоли не обязательно кодировка Cp866. Ее легко можно сменить на любую другую.
В кодировках нечего не понимаю. Что вы имеете ввиду? То есть у пользователя могут стоять другие настройки консоли и моя программа покажет кракозябы?
« Последнее редактирование: Октябрь 14, 2014, 10:11 от 8Observer8 » Записан
Страниц: 1 2 3 [4] 5 6   Вверх
  Печать  
 
Перейти в:  


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