|
130 / 25 / 12
Регистрация: 12.08.2015
Сообщений: 221
|
|||||||||||||||||||||
Русский текст в консоли ( решение для Qt под Windows )10.09.2016, 13:47. Показов 13627. Ответов 54
Метки нет (Все метки)
Хотите русский текст в консоли используя возможности чистого C или C++ но setlocale( ) не помогает? Вы выставляете кодировку в настройках Qt Creator но все равно выходят иероглифы? Скорее всего, вам больше не надо мучиться! Сегодня на меня снизошел дух творчества и я написал маленькую библиотечку, помогающую решить эту проблему! Библиотечка располагает тремя функциями и позволяет конвертировать "неправильную" строку в правильную, которая корректно отображается в консоли. Функции хорошо работают как на проектах языка C без Qt, С++ без Qt, так и проектах C++ с Qt (в рамках IDE Qt Creator).
Список функций _testrus( ); (Пишется с одним нижнем подчеркиванием впереди) Выводит тестовую таблицу доступных символов с русской азбукой впереди. Если русские символы отобразились без проблем, то библиотека точно подойдет! _torus( const char* str ) (Пишется с одним нижнем подчеркиванием впереди) Принимает в качестве аргумента строку в стиле C (можно использовать имя массива символов, главное чтобы стоял '\0' в конце) Возвращает указатель на char ( char* , строку) с исправленными символами. Есть третья, аналогичная функции _torus( const char* str ), функция с прикольным названием и без переднего подчеркивания, ищите в заголовочном файле! Пример использования:
Все, что надо сделать - это создать в проекте заголовочный файл с именем crussification.h ( без .h, расширение поставится само), скопировать содержимое скачанного файла и подключить его к проекту при помощи
Для тех, кто не может скачать файл, выкладываю исходник в виде текста:
0
|
|||||||||||||||||||||
| 10.09.2016, 13:47 | |
|
Ответы с готовыми решениями:
54
Русский текст в консоли Русский текст в консоли Русский текст в консоли |
|
130 / 25 / 12
Регистрация: 12.08.2015
Сообщений: 221
|
|
| 10.09.2016, 14:17 [ТС] | |
|
ВАЖНО ДОБАВИТЬ:
1. функция ___cmplet является сугубо внутренней и не представляет ценности в плане её прямого использования. Доступ к функции имеется только потому, что хотелось сделать решение универсальным и для C в Qt Creator и для С++ в Qt Creator (оттого и символы подчеркивания, для борьбы с возможным конфликтом имен ) 2. Вы можете обратиться к последней конвертированной строке. Она хранится в буфере с именем ___buff (три символа нижнего подчеркивания)
0
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 10.09.2016, 14:19 | |
|
Почему просто не использовать функции WinAPI вместо этого цикла?
0
|
|
|
130 / 25 / 12
Регистрация: 12.08.2015
Сообщений: 221
|
||
| 10.09.2016, 14:27 [ТС] | ||
0
|
||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 10.09.2016, 15:43 | |
|
Само перекодирование уже реализовано - есть функции. Нужен только буфер.
0
|
|
|
130 / 25 / 12
Регистрация: 12.08.2015
Сообщений: 221
|
|
| 10.09.2016, 16:07 [ТС] | |
|
А, ну так я видимо, не ахти какой программист, и самое простое решение для меня совершенно не очевидно.
Потому что я почти не знаком с WinAPI. У меня была проблема, я её решил для себя и решил так. Потому что для меня это лучший вариант. Ну и поделился с остальными. Пусть кому надо, но не знают как, пользуются. Уж лучше так, чем совсем никак. Я сколько ни искал, нашел только общие советы, что то по setlocale (что заменяет одни иероглифы на другие ), ну и пару через пень колоду работающих решений, которые выдают сто алетров, а то и вовсе не компилируются без доработки, а так же отказываются работать под другие версии винды. Ну а у меня зато универсально, хоть и не оптимально. Если можете, выложите свой, более хороший вариант, помогите новичкам!
0
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 10.09.2016, 16:13 | |
|
В разделе C++ прикреплена тема сверху про русский язык. Там всё уже описали.
0
|
|
|
130 / 25 / 12
Регистрация: 12.08.2015
Сообщений: 221
|
||||||
| 10.09.2016, 17:31 [ТС] | ||||||
|
Вы имеете в виду CharToOem
- можно обойтись им. - гарантированно поддерживается виндой - поддерживает множество языков Минусы CharToOem: - необходимость создавать wchar_t строки с модификатором L. - необходимость отдельного, не универсального буфера при любом нужном или не нужном случае, так как CharToOem не возвращает строки или указатель на неё, но переписывает в буфер содержимое - необходимость создавать оболочку для CharToOem на подобие моей, ради упрощения использования. - необходимость подключать windows.h с целой портянкой нужных и ненужных функций и возможностей мой вариант: Недостатки - велосипед - необходимость вставлять в проект отдельный файл вручную - Поддержка исключительно русскоязычного формата Достоинства - Нет необходимости использовать wchar_t, корректно обрабатываются даже "запоротые", не широкие char строки с широкими русскими символами. - Удобство использования функций. - Удобство русификации старого кода, с минимальными переделками ( Достаточно просто окружить русскую строку слева и справа, вот так: _torus( "русская строка" ); Знаете, а ведь есть из чего выбирать. Пусть будет и мой вариант. Он ничем не хуже.
0
|
||||||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 10.09.2016, 23:26 | |
|
0
|
|
|
130 / 25 / 12
Регистрация: 12.08.2015
Сообщений: 221
|
|
| 13.09.2016, 08:41 [ТС] | |
|
Можете дать небольшой пример?
CharToOemA() А то у меня что-то не выходит :/
0
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 13.09.2016, 08:44 | |
|
Что не получается? Два параметра: источник и приёмник, можно одну и ту же строку использовать.
0
|
|
|
130 / 25 / 12
Регистрация: 12.08.2015
Сообщений: 221
|
||||||
| 14.09.2016, 15:00 [ТС] | ||||||
|
При использовании CharToOemA() аналогично CharToOem ( И любых других комбинаций с буфером и без ) снова выходят иероглифы такого типа:
P'C<P_P_P_ C_C_C_C_PэP_P_P_ C'РчРэС_С'P C_C_C_ C_C_ РчэР_ Рё!
Возможно, я делаю что-то не так! (Но по-моему очевидно, что в текстовом редакторе Qt используются широкие символы 2 байта, поэтому при присваивании однобайтной char-строке двухбайтной строки (строкового литерала), символы "раздваиваются", их становится в два раза больше и они теряют смысл, и CharToOemA не способна конвертировать это )
0
|
||||||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
||
| 15.09.2016, 12:38 | ||
|
0
|
||
|
130 / 25 / 12
Регистрация: 12.08.2015
Сообщений: 221
|
||
| 15.09.2016, 16:58 [ТС] | ||
|
Данное решение для тех, кто занимается малокалиберным программированием только для себя\в плане обучения\в плане "программы для знакомых" . Вот скажите, ВЫ, именно ВЫ действительно считаете, что для новичка вообще возможно использовать wchar_t, когда новичок толком не знает что такое цикл или итерация? Серьезные программисты ВООБЩЕ не нуждаются в русской консоли. Русская консоль нужна только обучающимся, новичкам, или чисто "для себя". Для них я и писал. А ещё для себя.
0
|
||
| 15.09.2016, 17:09 | ||
|
Чем стандартный QTextStream с установленным кодеком не устраивает?
0
|
||
|
130 / 25 / 12
Регистрация: 12.08.2015
Сообщений: 221
|
||
| 15.09.2016, 17:19 [ТС] | ||
Мало того, я вам вот ещё что скажу: Qt имеет в настройках кодировку utf-8. Но почему-то СОВЕРШЕННО ЕЁ НЕ ПОДДЕРЖИВАЕТ! Мало того, если вы переключитесь на utf-8 в настройках, то писать вы все равно будете в другой кодировке. Мало того, если вы возьмете и начеркаете в notepad++ исходный код и сохраните в UTF-8, то Qt Creator НЕ ОТКРОЕТ ЭТОТ ФАЙЛ, и напишет что-то вроде "данный файл невозможно открыть в UTF-8 конвертировать в другой формат?" (Я потом посмотрю точнее и даже скриншот выложу, где видно, как Qt ругается на UTF-8) Господи, да что тут доказывать, вы просто зайдите в гугл, напишите, "Qt, русский текст в консоли Windows". И вы найдете целый вагон и маленькую тележку жалоб на то, что Qt Creator использует исключительно широкие символы в окне редактирования. Что Qt не хочет открывать открывать файлы с разными кодировками, которые якобы поддерживает. Что Qt не отображает русский\грузинский\еврейский и так далее. Тут только два выхода: либо использовать wchar_t, либо конвертировать широкие символы в однобайтные ASCII. ВООБЩЕ - Qt Creator отлично работает под почти любые дистрибутивы Linux, и никаких проблем с русским\грузинским\еврейским выводом символов - нет. То есть в Linux открываешь Qt - шпаришь на любом удобном языке, и все верно отображает. Проблемы с Qt только в Windows. потому что Qt Creator и консоль Windows паталогически несовместимы в плане вывода символов языков. И проблемы именно с консолью. Если делать проект с использованием библиотек Qt и сграфическим интерфейсом - проблем тоже нет. Добавлено через 3 минуты Вы что? Если я создаю в Qt Creator "чистый" проект без использования Qt, то с какого у меня там возьмется QObject::tr??? Как раз с Qt библиотекой при локализации никаких проблем не возникает! проблемы с русским возникают, если вы делаете в Qt Creator проект без использования библиотек Qt!
0
|
||
|
130 / 25 / 12
Регистрация: 12.08.2015
Сообщений: 221
|
||
| 15.09.2016, 18:06 [ТС] | ||
|
Я люблю Qt и Qt Creator И не люблю VS. ( за его излишнюю сложность в управлении проектами и отсутствие возможности переноса программ на альтернативные системы. ) Я пользуюсь не только Windows но и GNU/Linux Debian. И если я вижу, что у меня в моем любимом Qt Creator есть проблемы с windows консолью и отображением русских символов в "чистых" проектах ( ну нравится мне так, не люблю я много на английском писать ), я решаю проблему так, как мне удобнее. ( а удобнее мне без wchar_t ). Кто хочет использовать мой вариант решения проблемы - пусть использует. Ну и вообще, иногда нужны очень простенькие вещи, где Qt не требуется. Я пишу это в Qt Creator потому что привык. Я не хочу использовать Qt библиотеки ради русификации. И тем более скачивать целый VS ради этого, пусть даже бесплатную версию. Ну вот вы скажете: "Ну ок, да, твой вариант имеет право на жизнь, уговорил. Но кому нужно то же, что и тебе? Кто использует Qt Creator без использования Qt библиотек?". Отвечу: Ну, я иногда использую. Я что, такой уникальный и неповторимый с особыми запросами? Нет конечно!
0
|
||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
||||||
| 15.09.2016, 18:44 | ||||||
|
Qt Creator использует utf-8. Надо преобразовать в 866 для русской консоли, но никаких еврейских и грузинских вместе с русским одновременно не будет.
0
|
||||||
| 15.09.2016, 18:44 | |
|
Помогаю со студенческими работами здесь
20
Русский текст в консоли Кодировка, русский текст в консоли Русский текст в консоли (не одно и то же) После компиляции в консоли не выводится русский текст Как с консоли записать в файл русский текст Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|