Русский язык в консольных приложениях

Тема в разделе "WASM.SOFTWARE", создана пользователем Ivan_assm, 22 янв 2008.

  1. Ivan_assm

    Ivan_assm New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2007
    Сообщения:
    132
    Адрес:
    Везде и нигде
    Использую Microsof Visual C++ для компилирования исходников своих программ...раньше использовал lcc compiler. но везде одна проблема :когда запускаю программу там каракули вместо рус яза.рылся в кодировках и шрифтах Windows xp, рылся в настройках компилятора(в хэлпах информации не нашел), но так и не смог исправить. не то что б уже это было так важно, но раздражает сильно.
    Где собака зарыта, как сделать чтоб рус яз нормально выводился в консольных приложениях написанных на С++ ?
     
  2. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    думаю, только ФАР нам поможет.... (я так консольные проги на дельфе писал 100 лет назад)
     
  3. Ivan_assm

    Ivan_assm New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2007
    Сообщения:
    132
    Адрес:
    Везде и нигде
    должно быть другое решение, 9 чувством чувствую...
     
  4. shurik

    shurik Александр

    Публикаций:
    0
    Регистрация:
    27 авг 2006
    Сообщения:
    52
    Адрес:
    Украина
    Ivan_assm
    Как раз недавно сам столкнулся с такой же проблемой :)
    Функция CharToOem помогла
     
  5. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    shurik
    Функция CharToOem помогла
    Открой консоль (cmd). Набери "chcp 1251<Enter>". Запусти программу. Набери "chcp 866<Enter>". Запусти программу. В одном из случаев букарашки?

    Ivan_assm
    как сделать чтоб рус яз нормально выводился в консольных приложениях
    Надо выводить текст в той кодовой странице, которая установлена в консоли.

    Например, можно использовать следующие решения:

    1) используя SetConsoleOutputCP установить ту кодовую страницу, в которой был набран исходный текст, если в visual studio, то 1251, если в far’е, то 866;

    2) используя GetConsoleOutputCP получить кодовую страницу консоли, если она совпадает с той, в которой набран исходный текст, то просто вывод, иначе конвертировать текст перед выводом.
     
  6. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Гораздо проще использовать нормальный редактор, поддерживающий альтернативную кодировку.
    Или если ну никак нельзя без студии, вынести объявления строк в другой файл, создаваемый другим редактором и инклудить его в основной исходник.
     
  7. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Vov4ick
    Т.е. хранить в исхднике строки для двух кодовых страниц?
     
  8. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Нет. Определения строк хранить в отдельном файле в нормальной кодировке, который создавать нормальным редактором.
    strings.inc
    Код (Text):
    1. message[]="sample message",13,10,0
    prog.c
    Код (Text):
    1. #include "strings.inc"
    2. printf(message)
    А лучше пользоваться одним нормальным редактором, т.к. при написании консольных прог студийная рисовалка форм не используется, а более она ни за чем не нужна. А ещё лучше писать на ассемблере :derisive:
     
  9. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Vov4ick
    А если "нормальная" кодировка не совпадет с кодовой страницей консоли?
     
  10. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    а для фасма я писал макрос, который перекодирует 1251 в 866
     
  11. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    q_q Ну она на то и нормальная, чтобы совпадать :derisive:
     
  12. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Писать надо на том, на чем удобно) И что больше подходит для решения задачи. А кодировка тут не при чем
     
  13. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва
    Ivan_assm
    Я, при проблемах с русской кодировкой в консоле, использовал старые драйвера под ДОС типа keyb.com (которые позволяют отоьражать кирилицу). Единсвенное, надо было писать в кодировке не Windows, а OEM DOS и каждый раз загружать драйвер