Наверх
Логотип кафедры РКС УИПА
10:48
29.03.2024
Пятница
Добрый день, Гость

Вход
Регистрация
   

T&T0x03. Кириллица в консоли Windows

Задача. Получить вывод русских/украинских сообщений разрабатываемой программы в консольном приложении.

Решение. Включить правильную кодовую страницу.

Начиная изучать С/С++ многие программисты сталкиваются с проблемой «крякозябров» при попытке вывода русского текста в консоле Windows.

Пример.

#include < stdio.h >
int main(int argc, char **argv)
{
     printf("Привет, мир!\n");
     getch();
     return 0;
}

Результат :)

Для решения данной проблемы следует уяснить два важных момента.

Первое, консоль русской/украинской Windows по умолчанию имеет кодировку 866.

Второе, текст, набранный в редакторе IDE может быть в различных кодировках, для интегрированных сред на основе mingw, таких как Codelite (codelite.org) или Code::Blocks (codeblocks.org) скорее всего utf-8 :), в чем и кроется ряд дополнительных проблем.

Известные способы (http://www.progz.ru/t1979/, http://www.gamedev.ru/code/faq/?id=3619, http://www.rsdn.ru/forum/cpp/319487.flat.aspx и др.) подразумевают, что в редакторе текст набран в кодировке Windows 1251.

Проверим рекомендации.

Рекомендация 1.

#include < stdio.h >
#include < locale.h >
int main(int argc, char **argv)
{
     setlocale (LC_ALL, ".1251"); !!!!!!!!!
     printf("Привет, мир!\n");
     getch();
     return 0;
}

Результат :)

Рекомендация 2.

#include < stdio.h >
#include < windows.h >
int main(int argc, char **argv)
{
     SetConsoleCP(1251);
     SetConsoleOutputCP(1251);
     printf("Привет, мир!\n");
     getch();
     return 0;
}

Результат :)

Решение, system("chcp 65001 > nul"), может и не очень изящное, но позволяет легко решить  проблему «крякозябров». Данная команда включает «правильную» кодовую станицу (см. http://ru.wikipedia.org/wiki/Кодовая_страница )

#include < stdio.h >
int main(int argc, char **argv)
{
     system("chcp 65001 > nul");
     printf("Привет, мир!\n");
     getch();
     return 0;
}

Результат :)

Для того, что бы это заработало, следует установить «правильный» шрифт в консоли, поддерживающий UNICODE, например, Lucida Console.

После установки шрифта, получаем желаемый результат.

Удачного программирования с русским выводом в консоли.

ЗЫ. Никто не запрещает установить по умолчанию в редакторе кодовую страницу 1251 и использовать упоминавшиеся выше рекомендации.

ЗЗЫ. Все примеры проверялись в ОС Windows XP.

ЗЗЗЫ. Использование Linux избавляет от головной боли с выводом в консоль :)

Ліцензія Creative CommonsКириллица в консоли Windows is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.


Рубрика: Tips&Tricks

Авторы: Савченко В.Н.
Опубликовано: 24.09.11 16:04

Н р а в и т с я ?    Р а с с к а ж и    Д р у з ь я м !

Сдесь должны появиться кнопки социальных сетей

Комментарии могут оставлять только зарегистрированные пользователи.
Войдите под своим логином, чтобы оставить комментарий.


bearjrgm
Администратор
Нет фото


По поводу отсутствия головной боли с выводом в консоль линукс... Это не правда. Приду покажу.
--------------------------------------------------------------------------------
Проблемы с выводом в консоль существуют, если мешать кодировки в редакторе и консоли. По умолчанию, в Linux сейчас utf8, и все редакторы интегрированных оболочек думают именно так, в Windows не совсем так :) начиная от 866 кодовой страницы для консоли (cmd.exe) в случае русского языка и принятой кодировки 1251 в самой системе, плюс кроссплатформенные приложения ставят в редакторе utf8, отсюда и родилась данная заметка. В случае переноса кода из Windows в Linux, нужно правильно перекодировать исходники.
И собственно говоря, ждем Вашей головной боли :) Попробуем найти аспирин.
Опубликовано: 29.09.11 16:46:44

ktimus
Студент
Нет фото


Отличная статья!
Опубликовано: 25.09.11 05:25:13

vasutin
Студент
Нет фото


По поводу отсутствия головной боли с выводом в консоль линукс... Это не правда. Приду покажу.
Опубликовано: 25.09.11 04:59:41

   
  Случайное фото  
 
     
  Популярные статьи  
Ускоряем 3G интернет. 3G Антенна своими рукамиОпрос студентов кафедры РКС. Отзывы студентов об УИПА (Видео)Поздравляем с Днем Рождения!!!Стенгазеты студентов кафедры к празднику 8 марта 2012 годаПравила поведения в общественных местах. Административные правонарушенияВыставка морских раковин "Планета Океан" в галерее "АВЭК"Светодиодная цветомузыка для компьютераБугущая строка на базе микроконтролера ATmega48. Made by Hunter & Kosmos
     
Loading
  Полезные ссылки  
  • Официальный сайт УИПА
  • Сайт Библиотеки УИПА
  • Дистанционное обучение
  • Сервисный Центр FreshIT
  • Веб-студия Around
  • СТО Новые Дома "Алекс Сервис" Харьков
  • Заправка картриджей Харьков
  • Ремонт телефонов Холодная гора
  •      
    Система Orphus



    Tips&Tricks
    Web programming
    Жизнь студентов
    Интересные факты
    Мероприятия
    Молодые ученые
    Общежитие
    Объявления
    Свободный софт
    Технический раздел
    Компьютерные системы и сети
    Телекоммуникации и связь
    Преподаватели кафедры
    Трудоустройство
    Дни открытых дверей
    Copyright © 2010 - 2024. created by nick