powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Qt 5.0 кирилица
12 сообщений из 12, страница 1 из 1
Qt 5.0 кирилица
    #38288197
sterewert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Может кто подсказать как вывод в консоль русских символов делать на Qt 5.0?
...
Рейтинг: 0 / 0
Qt 5.0 кирилица
    #38288270
sherzod_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sterewertДобрый день.
Может кто подсказать как вывод в консоль русских символов делать на Qt 5.0? Изъезженный вопрос. В линуксе все должно из коробки работать, если только вы вручную не поменяли кодировку исходников на отличную от utf-8. В любом случае не помешает прописать в main:
Код: plaintext
1.
2.
3.
4.
5.
QTextCodec * codec;
codec = QTextCodec::codecForName("cp1251 или utf-8 или ...");
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForTr(codec);
...
Рейтинг: 0 / 0
Qt 5.0 кирилица
    #38288334
sterewert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чуть переиначу вопрос.

OC - Windows
Qt 5.0.2 mingw47_32

Есть ини файл в кодировке 1251 ANSI. В нем есть строка с русскими символами. Как в консоль его вывести?
Код: plaintext
1.
2.
3.
4.
5.
   QSettings settings(FAppPath + "file.ini", QSettings::IniFormat);

   QString test = settings.value("Server/test").toString();

   qDebug() << test;
...
Рейтинг: 0 / 0
Qt 5.0 кирилица
    #38288337
sterewert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В пятерке этих вещей уже нет, а весь инет исписан именно таким способом перекодировки.

QTextCodec::setCodecForCStrings(codec)
QTextCodec::setCodecForTr(codec);

Так, не вышло.
Код: plaintext
1.
2.
3.
4.
5.
    QByteArray encodedString;
    encodedString.append(test);
    QTextCodec *codec = QTextCodec::codecForName("cp1251");
    QTextCodec::setCodecForLocale(codec);
    QString string = codec->toUnicode(encodedString);
...
Рейтинг: 0 / 0
Qt 5.0 кирилица
    #38288349
sherzod_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sterewertВ пятерке этих вещей уже нет, а весь инет исписан именно таким способом перекодировки.
QTextCodec::setCodecForCStrings(codec)
QTextCodec::setCodecForTr(codec);

Так, не вышло.
Код: plaintext
1.
2.
3.
4.
5.
    QByteArray encodedString;
    encodedString.append(test);
    QTextCodec *codec = QTextCodec::codecForName("cp1251");
    QTextCodec::setCodecForLocale(codec);
    QString string = codec->toUnicode(encodedString);

Вывод русского текста в консоли windows это гадание на кофейной гуще. Попробуйте добавить в main:
Код: plaintext
1.
2.
system("chcp 1251"); // для cp1251, при это не надо преобразовывать выводимый текст в юникод
system("chcp 65001"); // для utf-8, для преобразованного в юникод текста

Советую проверять результат перекодирования дампом содержимого в какой-нибудь QTextEdit, и вообще в Qt лучше сделать свою консоль на основе QTextEdit, кроме прекрасной работы с любыми кодировками, будут возможности для оформления.
...
Рейтинг: 0 / 0
Qt 5.0 кирилица
    #38288350
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sterewert, виндовая консоль работает в кодировке cp866, есичё
...
Рейтинг: 0 / 0
Qt 5.0 кирилица
    #38288395
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sterewert,

посмотри для QSettings::setIniCodec:

Код: plaintext
1.
settings.setIniCodec("Windows-1251");



уже после этого читай из файла. А вообще, ты себе гемор наживаешь на ровном месте. Зачем писать в 1251, когда можно спокойно перевести все файлы в UTF-8.
...
Рейтинг: 0 / 0
Qt 5.0 кирилица
    #38288422
sterewert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий Широковsterewert,

посмотри для QSettings::setIniCodec:

Код: plaintext
1.
settings.setIniCodec("Windows-1251");



уже после этого читай из файла. А вообще, ты себе гемор наживаешь на ровном месте. Зачем писать в 1251, когда можно спокойно перевести все файлы в UTF-8.

Вот так заработало.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
    QString FAppPath = QCoreApplication::applicationDirPath() + "/";
    QSettings settings(FAppPath + "file.ini", QSettings::IniFormat);
    settings.setIniCodec("Windows-1251");

    QString test = settings.value("Server/test").toString();
    QTextCodec *codec = QTextCodec::codecForName("cp866");
    QTextCodec::setCodecForLocale(codec);
    
    qDebug() << test;



Насчет гемора абсолютно согласен. И конечно же я создам файл в кодировке UTF-8. Все что вышел я привел для примера, желая разобраться как в qt работать с различными кодировками, но к сожалению пример оказался неудачным. Дело в том, что я обрабатываю get запрос который мне приходит из другого приложения, которое с UTF-8 не дружит и подружить его нет возможности. В этом get запросе русские символы в кодировке windows-1251, которые отображаются в виде белеберды на сервере Qt (который принимает и разбирает этот запрос). И вот как перекодировать с win1251 в utf-8? так и остается вопросом
...
Рейтинг: 0 / 0
Qt 5.0 кирилица
    #38288438
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sterewertДобрый день.
Может кто подсказать как вывод в консоль русских символов делать на Qt 5.0?

Как бы секретов нет,
Код: plaintext
1.
puts("А роза упала на лапу Азора");
...
Рейтинг: 0 / 0
Qt 5.0 кирилица
    #38288442
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sterewertЧуть переиначу вопрос.

OC - Windows
Qt 5.0.2 mingw47_32

Есть ини файл в кодировке 1251 ANSI. В нем есть строка с русскими символами. Как в консоль его вывести?


Код: plaintext
type myfile


Поставь кодировку консоли в cp1251 , и не мучайся больше.

Код: plaintext
man chcp

(ладно, просто

Код: plaintext
chcp 1251
)
...
Рейтинг: 0 / 0
Qt 5.0 кирилица
    #38288586
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вот как перекодировать с win1251 в utf-8? так и остается вопросом

Ну, все основные сервисы собраны в QTextCodec:

к примеру, в твоем случае, когда ты получил QByteArray, то можешь попробовать следующий код:

Код: plaintext
1.
2.
3.
QByteArray html = ...;
QTextCodec* defaultTextCodec = QTextCodec::codecForName("Windows-1251");
QTextCodec* htmlTextCodec = QTextCodec::codecForHtml(html, defaultTextCodec);



ну а дальше уже преобразование

Код: plaintext
1.
QString unicode = htmlTextCodec->toUnicode(html);



Ну а в utf8 понятно уже средстами QString

Код: plaintext
1.
QByteArray utf8 = unicode.toUtf8();
...
Рейтинг: 0 / 0
Qt 5.0 кирилица
    #38288637
sterewert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий Широков,

Вот спасибо. Заработало! :)
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Qt 5.0 кирилица
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]