@ILoveAsm

Кириллица в c++. Что с ней не так?

Недавно начал писать на c++ и сразу же столкнулся с проблемой вывода русских букв в консоль. Для уточнения, может надо, использую clion. Что я только не перепробовал, setlocale(LC_ALL, "Russian"), SetConsoleCP(1251), и 866 пытался, chcp 1251/866 тоже не работает. Все равно какие то непонятные символы в консоли. Может еще чего попробовать?
PS: Починил! Изменил кодировку main на 1251, кодировку консоли на 1251 и setlocale Russian.
  • Вопрос задан
  • 179 просмотров
Пригласить эксперта
Ответы на вопрос 2
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
Как распознать кракозябры:

Как распознаете - сможете понять из какой кодировку в какую у вас происходит трансформация и настроить всё в единой кодировке или добавить нужные опции где надо.
Ответ написан
Комментировать
@res2001
Developer, ex-admin
В виндовой консоли есть 2 русские кодировки cp866 и cp1251. Причем cp866 используется по умолчанию! Так же есть еще 65001 (UTF8), которая то же умеет в кирилицу. Пользователь консоли может менять кодировку по собственному усмотрению (команда chcp /?). Как правило встроенные виндовые утилиты командной строки правильно работают с любой установленной кодировкой (можете сами в этом убедиться).

Дополнительно к кодировкам самой консоли винды добавляется еще кодировка в которой написаны ваши исходники. Кодировка исходников должна быть совместима с кодировкой консоли. Если не совместима, то нужно или переключать кодировку консоли (что для консольных утилит не хорошо - это вам пользователи утилиты потом расскажут) или перекодировать вводимые/выводимые строки на лету.

Самый простой вариант решить проблему - писать исходники в cp866, тогда в консоли по умолчанию все будет выводится правильно без всяких танцев с бубном. Но если пользователь поменяет кодировку, то все опять разъедется. Кроме того использовать cp866 для исходников - не комильфо.

Лучше исходники всегда писать в UTF8 а для строк использовать wchar_t.
Тут и не только тут эта проблема уже обсуждалась не однократно. Например посмотрите эту ссылку: https://qna.habr.com/answer?answer_id=2278154#comm...
Не смотрите, что там тема по Си - проблема та же самая и решения для Си и С++ будут похожие.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы