Русские буквы в консоле

Тема в разделе "LANGS.C", создана пользователем pashe4ka13, 21 ноя 2011.

  1. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    Написал функцию вызова консоли
    Код (Text):
    1. bool CreateConsole()
    2. {
    3.      FreeConsole();
    4.      if (AllocConsole())
    5.      {
    6.            SetConsoleOutputCP(1251); // Чтобы русские буквы отображать
    7.            int hCrt = _open_osfhandle((long) GetStdHandle(STD_OUTPUT_HANDLE), 0);
    8.            FILE *f=::_fdopen(hCrt, "w");
    9.            if(setvbuf(f, NULL, _IONBF, 0)==0)
    10.             {
    11.                *stdout = *f;
    12.                *stderr = *f;
    13.                 return false;
    14.              }
    15.       }
    16.            return true;
    17. }
    вызываю
    Код (Text):
    1.     void Вывод(char*s)
    2.     {
    3.                 CreateConsole();
    4.        printf("Привет мир!");
    5.     }
    В результате кракозябры. Что не так?
     
  2. bizdon

    bizdon Member

    Публикаций:
    0
    Регистрация:
    7 апр 2009
    Сообщения:
    86
    поищи по форуму, кнопка поиска третья сверху. Правильно пишется "в консолИ", но ищи и "в консолЕ", ибо ты не первый, кто пишет "в консолЕ".
     
  3. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    pashe4ka13
    Почему не - CharToOem() ?
     
  4. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    pashe4ka13
    Лучше не 1251, а сразу к юникоду привыкать:
    Код (Text):
    1. AllocConsole();
    2. UINT cpOld = GetConsoleOutputCP();
    3. SetConsoleOutputCP(CP_WINUNICODE);
    4. FILE *hfOut = _tfdopen(_open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), 2 /*_O_TEXT*/), _T("w")),
    5.     *hfIn = _tfdopen(_open_osfhandle((long)GetStdHandle(STD_INPUT_HANDLE), 2 /*_O_TEXT*/), _T("r"));
    6. *stdout = *stderr = *hfOut;
    7. *stdin = *hfIn;
    8. _setmode(_fileno(stdout), _O_U16TEXT);
    9. _tprintf(_T("Привет, мир!"));
    10. getch();
    11. fclose(hfIn);
    12. fclose(hfOut);
    13. SetConsoleOutputCP(cpOld);
    14. FreeConsole();
     
  5. F1x1t

    F1x1t New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2008
    Сообщения:
    2
    А не проще ли так : setlocale(0,""); ?
     
  6. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    http://www.rsdn.ru/article/qna/ui/concp.xml
     
  7. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    Всем большое СПАСИБО! Проблема решена, тему можно закрыть.