• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте, чтобы узнать больше. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Dev C++, кириллица и кракозябры

Bydlokoder

Любитель
Почётный участник
Регистрация
6 Май 2011
Сообщения
3,359
Реакции
108
Баллы
63
Dev C++, кириллица и кракозябры

Здравствуйте. Подскажите пожалуйста, можно ли как то решить проблему некорректного отображения кириллицы в консольных программах, созданных в Dev C++? Поиском по интернету нашел кое-какую информацию, но мне это мало помогло, поскольку в программировании я пока не разбираюсь совершенно и мало что понял из пояснений о подключаемых файлах и функциях. Может кто подскажет, что нужно добавить в такой вот код, чтобы текст отображался нормальным русским языком, а не кракозябрами:

#include <iostream>
using namespace std;

int main()
{
cout << '\t' << "ляляля" << '\n';
}
 
Попробуйте в функцию main() добавить:
Код:
setlocale( LC_ALL, "Russian" );

Еще можно писать в специализированных текстовых редакторах (Bred, например), которые поддерживают кодировку OEM.
 
Видимо функция setlocale() работает только в Visual C++.

Можно использовать функцию CharToOem(), но это довольно муторно.
Код:
#include <iostream>
#include <windows.h>
using namespace std;

int main()
{
    char str[] = "Привет мир!\n";
    char buf[80];
    
    CharToOem(str, buf);
    
    cout << buf;
    
    return 0;
}
Для вызова функции необходимо подключить файл windows.h. Она передает 2 аргумента: 1 массив, содержащий строку, второй массив, в который будет записана переведенная строка.
 
Да, такой способ работает, русский текст в консоли отображается в нормальном виде. Как я понял, тут символы сначала записываются в массив, затем преобразуются и лишь потом выводятся на дисплей, сделать это "влет" с Dev C++ как видно не получится. По крайней мере теперь я вижу, что вывод кириллицы возможен, кроме того задумался о необходимости осваивать Visual Studio.
Спасибо большое за участие, а то у меня руки опускаться стали, никак не мог справиться с кракозябрами.
 
Можно использовать пропатченную версию g++rus.exe, прописав его в Сервис-Параметры компилятора на вкладке Программы вместо g++.exe

Скачать пропатченную можно по ссылке ниже:
Посмотреть вложение g++rus.zip
 
Попробовал, вроде работает, но как-то через раз. Файлы добавил, нужные исправления сделал. Пару раз скомпилированное консольное приложение корректно отработало, с правильным отображением кириллицы, а затем компилятор отказался нормально работать. Создал новый проект, с нуля, компиляция прошла успешно, но в консоли опять кракозябры. Закончилось все тем, что скачал и установил VS Express, он хотя и нагружает мой маломощный комп на полную катушку, зато с настройками никаких проблем.
 
Назад
Сверху