none
Текстовые сообщения на русском языке, выводимые на экран через std::cout, печатаются каракулями. RRS feed

  • Вопрос

  • У меня русифицированная лицензионная Windows 7 Максимальная и русифицированная VisualStudio 2013 Ultimate. На этой VS 2013 делаю консольное приложение Visual C++. В нём, делаю все текстовые сообщения, выводимые на экран через std::cout для информирования пользователя, на русском языке. А они на экран выводятся не по русски, а каракулями. Что надо сделать, что бы эти текстовые сообщения выводились на экран по русски?



Ответы

  • Исторически сложилось так, что кодировки русских символов, отображаемых в консольном и графическом окне, различаются. Набирая текст программы, Вы работаете в графическом окне, а выводятся эти символы в консольное. Потому и "каракули".

    Есть несколько способов отобразить строку корректно. Первый: настроить локализацию консоли в своей программе вызовом функции библиотеки Си setlocale. В этом случае вся вводимая и выводимая информация становиться локализованной (в частности разделителем целой и дробной части вещественного числа будет запятая, а не точка, дата и время выводятся в "российском" формате и т.п.).

    Второй, более трудоемкий: конвертировать выводимую строку с помощью функции WinAPI CharToOem. Локализация консоли при этом не затрагивается, но требуется конверсия каждой строки перед ее выводом в консоль.


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Предложено в качестве ответа YatajgaModerator 5 июня 2014 г. 15:28
    • Помечено в качестве ответа Purple_Apple 5 июня 2014 г. 16:04
    5 июня 2014 г. 13:58

Все ответы

  • Исторически сложилось так, что кодировки русских символов, отображаемых в консольном и графическом окне, различаются. Набирая текст программы, Вы работаете в графическом окне, а выводятся эти символы в консольное. Потому и "каракули".

    Есть несколько способов отобразить строку корректно. Первый: настроить локализацию консоли в своей программе вызовом функции библиотеки Си setlocale. В этом случае вся вводимая и выводимая информация становиться локализованной (в частности разделителем целой и дробной части вещественного числа будет запятая, а не точка, дата и время выводятся в "российском" формате и т.п.).

    Второй, более трудоемкий: конвертировать выводимую строку с помощью функции WinAPI CharToOem. Локализация консоли при этом не затрагивается, но требуется конверсия каждой строки перед ее выводом в консоль.


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Предложено в качестве ответа YatajgaModerator 5 июня 2014 г. 15:28
    • Помечено в качестве ответа Purple_Apple 5 июня 2014 г. 16:04
    5 июня 2014 г. 13:58
  • Спасибо большое.
    6 июня 2014 г. 13:54