Отображение кириллицы в CLion
Нужна помощь: не отображается кириллица в терминале CLion. Вот так выглядит надпись «Привет, Мир!»:
Вот что будет с кодировкой windows-1251 :
Ответы (3 шт):
Похоже вы компилируете проект с помощью MinGW, у меня была такая же проблема с кодировками в консоли СLion (которая выводится внизу при выборе «Run» в панели инструментов справа сверху), также пробовал разные кодировки, результат один не читаемые «крякозаблики». Правда когда используешь cp-1251 и запускаешь программу в консоли Windows (CMD), то тоже выводится всё хорошо (правда это не очень удобно, надо сделать больше телодвижений).
На другом ноутбуке попробовал использовать CLion вместе с CygWin и всё стало нормально при настройках кодировки по умолчанию, я использовал UTF-8.
Почему так происходит?
CLion по дефолту использует UTF-8 для хранения файлов с исходным кодом. Строка «Привет, Мир!» будет представлять собой последовательность (в файле с исходником):
Как видите, на 12 символов исходной строки, получили 21 байт (т.к. кириллические символы занимают больше одного байта).
Компилятор GCC по умолчанию читает исходники в кодировке UTF8 , если не указать другую через ключ -finput-charset . Таким образом эта последовательность байтов в неизменном виде сохранится в исполняемый файл.
При запуске программы на исполнение, CLion использует стандартный cmd.exe , который по умолчанию скорей всего у вас работает в кодировке CP866 . В которой наша последовательность байтов будет отображена как:
(что вы и видите в терминале CLion)
Что делать?
Вариант 1
Сменить кодировку файла на IBM866 (то же, что и CP866 ) (настройки — File Encodings) (сам файл перекодировать, если там уже был текст на русском). Теперь кириллица будет сохраняться в файле с исходным текстом в кодировке CP866 (один байт на символ), в том же виде попадать в исполняемый файл и нормально отображаться в консоли CLion. Разумеется, использовать CP866 в 17-м году, без особых на то оснований, это некультурно. Кроме того придется ограничить себя только символами из CP866 .
Вариант 2
Вставить в начало свой программы:
или (потребует #include <windows.h> ):
Консоль переключится в UTF-8 , все будет отображаться как надо. Но только при использовании низкоуровневых операций вывода типа puts(«Привет, Мир!»); . Если выводить через std::cout , то возможен вывод типа ��ривет, Мир! . Это связано с тем, что Windows API для вывода в консоль ожидает видеть в каждом вызове законченную строку. И если оператор basic_ostream<char>::operator<<(char*) для символа ‘П’ выполнит два API вызова (с D0 и 9F ), то они не сольются в одну букву ‘П’, а будут интерпретированы и отображены как два разных символа ( �� ).
Предостережение
При использовании UTF-8 в своей программе, например при хранении в std::string , следует помнить, что операции над строками могут дать не очевидные результаты (т.к. один символ теперь может занимать от 1 до 4 байтов).
Кроме вывода, аналогичные проблемы ожидают и при вводе из std::cin . Таким образом, единственное прозрачное решение для Windows (даже десятки), пока остается использование латиницы.
Encoding
To display and edit files correctly, CLion needs to know which encoding to use. In general, source code files are mostly in UTF-8. This is the recommended encoding unless you have some other requirements.
To determine the encoding of a file, CLion uses the following steps:
If the byte order mark (BOM) is present, CLion will use the corresponding Unicode encoding regardless of all other settings. For more information, see Byte order mark.
If the file declares the encoding explicitly, CLion will use the specified encoding. For example, this can apply to XML, HTML, and JSP files. The explicit declaration also overrides all other settings, but you can change it in the editor.
If there is no BOM and no explicit encoding declaration in the file, CLion will use the encoding configured for the file or directory in the file encoding settings. If encoding is not configured for the file or directory, CLion will use the encoding of the parent directory. If the parent directory encoding is also not configured, CLion will fall back to the Project Encoding , and if there is no project, to Global Encoding .
Change the encoding used to view a file
If CLion displays characters in a file incorrectly, it probably couldn’t detect the file encoding. In this case, you need to specify the correct encoding to use for viewing and editing this file.
With the file open in the editor, either select File | File Properties | File Encoding from the main menu or click the File Encoding widget on the status bar, and select the correct encoding of the file.

The list of encodings is rather large. You can use speed search to quickly find the correct encoding: start typing when the popup is open.
Encodings marked with or might change the file contents. In this case, CLion opens a dialog where you can choose what to do with the file:
Reload : load the file in the editor from disk and apply encoding changes to the editor only. You will see the content changes related to the chosen encoding, but the actual file will not change.
Convert : overwrite the file with the chosen encoding.
This will add an association for the file to the file encoding settings. CLion will use the specified encoding to view and edit this file.
Configure file encoding settings
Press Ctrl+Alt+S to open the IDE settings and select Editor | File Encoding .
CLion uses these settings to view and edit files for which it was unable to detect the encoding and uses the specified encodings for new files. For more information, see File Encodings.
Select console output encoding
By default, CLion uses the system encoding to view console output.
In the Settings dialog ( Ctrl+Alt+S ), select Editor | General | Console .
Как настроить кодировку в clion, чтобы корректно отображался русский алфавит?
Здравствуйте! Не могу найти в интернете, как настроить кодировку, чтобы корректно выводить русские буквы в CLion. Прилагаю скриншот проблемы 
- Вопрос задан более года назад
- 4224 просмотра
Простой 1 комментарий
- Вконтакте
Не знаю как задать кодировку консоли в CLion, наверняка как-то это делается.
Но советую вам запускайть программу в обычной консоли (cmd.exe).
Т.к. IDE обычно настраивают консоль под себя. А работать ваша программа будет вообще то без IDE. Поэтому не сильно интересно, чтоб программа корректно работала под IDE. Гораздо интереснее, чтоб программа работала нормально в обычной обстановке.
Еще могу сразу предупредить — в русской винде в консоли может быть 2 русских кодировки. По умолчанию используется cp866. Но командами консоли кодировку можно сменить на cp1251. Так же кодировку можно сменить и на UTF-8, но с ней многие команды не дружат, поэтому она практически не используется в консоли.
Если ваша программа будет осуществлять консольный ввод/вывод только в одной кодировке, то при переключении кодировки в консоли, ваша программа будет отрабатывать не корректно (так же как сейчас).
Ваш компилятор, сам язык и стандартная библиотека ничего не знают о кодировках консоли и ничего не делают специально, чтоб вывод был корректный. Т.е. выводится в консоль именно то, что вы написали в исходниках.
Можно писать программу так, что бы она корректно работала не зависимо от кодировок консоли. Но это несколько сложней обычного printf.
coding
Нужна помощь: не отображается кириллица в терминале CLion. Вот так выглядит надпись «Привет, Мир!»:
╨Я╤А╨╕╨▓╨╡╤В, ╨Ь╨╕╤А!
Вот что будет с кодировкой windows-1251
╧ЁштхЄ, ╠шЁ!
Ответ
Почему так происходит?
CLion по дефолту использует UTF-8 для хранения файлов с исходным кодом. Строка «Привет, Мир!» будет представлять собой последовательность (в файле с исходником):
D0 9F D1 80 D0 B8 D0 B2 D0 B5 D1 82 2C 20 D0 9C D0 B8 D1 80 21
Как видите, на 12 символов исходной строки, получили 21 байт (т.к. кириллические символы занимают больше одного байта).
Компилятор GCC по умолчанию читает исходники в кодировке UTF8, если не указать другую через ключ -finput-charset. Таким образом эта последовательность байтов в неизменном виде сохранится в исполняемый файл.
При запуске программы на исполнение, CLion использует стандартный cmd.exe, который по умолчанию скорей всего у вас работает в кодировке CP866. В которой наша последовательность байтов будет отображена как:
╨Я╤А╨╕╨▓╨╡╤В, ╨Ь╨╕╤А!
(что вы и видите в терминале CLion)
Что делать?
Вариант 1
Сменить кодировку файла на IBM866 (то же, что и CP866) (настройки — File Encodings) (сам файл перекодировать, если там уже был текст на русском). Теперь кириллица будет сохраняться в файле с исходным текстом в кодировке CP866 (один байт на символ), в том же виде попадать в исполняемый файл и нормально отображаться в консоли CLion. Разумеется, использовать CP866 в 17-м году, без особых на то оснований, это некультурно. Кроме того придется ограничить себя только символами из CP866
Вариант 2
Вставить в начало свой программы:
system(«chcp 65001»);
или (потребует #include ):
SetConsoleOutputCP(CP_UTF8);
Консоль переключится в UTF-8, все будет отображаться как надо. Но только при использовании низкоуровневых операций вывода типа puts(«Привет, Мир!»);. Если выводить через std::cout, то возможен вывод типа ��ривет, Мир!. Это связано с тем, что Windows API для вывода в консоль ожидает видеть в каждом вызове законченную строку. И если оператор basic_ostream ::operator Автор: webmaster на 11:25