System chcp 1251 c что это
Перейти к содержимому

System chcp 1251 c что это

Настройка отображения русских букв в консоли

Если мы сохраним файл с программой в кодировке windows-1251, то результат следующей инструкции:

в окне консоли будет выглядеть так:

Причина искажения русских букв заключается в том, что по умолчанию в окне консоли используется кодировка windows-866, а в программе мы ввели текст в кодировке windows-1251. Коды русских букв в этих кодировках отличаются, поэтому происходит искажение. При использовании командной строки пользователь может сменить кодировку вручную, выполнив команду:

Однако этого недостаточно. Кроме смены кодировки необходимо изменить название шрифта, так как по умолчанию используются точечные шрифты, которые не поддерживают кодировку windows-1251. Для нормального отображения русских букв следует в свойствах окна выбрать шрифт Lucida Console (рис. 2.13). Все эти действия вы можете произвести на своем компьютере, однако пользователи не знают в какой кодировке выводятся данные в вашей программе.

2_13.png

Рис. 2.13. Указание шрифта Lucida Console в свойствах окна консоли

Изменить кодировку из программы мы можем с помощью функции system() :

А вот изменить шрифт из программы проблематично. Поэтому никакой гарантии, что пользователь увидит русские буквы без искажений нет.

Консоль в Windows по умолчанию работает с кодировкой windows-866, поэтому мы можем и файл с программой сохранить в этой кодировке. При использовании редактора Notepad++ вначале создаем новый документ, а затем в меню Кодировки выбираем пункт Кодировки | Кириллица | ОЕМ 866. Вводим текст программы и сохраняем файл.

Вроде все отлично, т. к. мы сохраняем файл в кодировке консоли по умолчанию:

Однако пользователь может сменить кодировку в консоли и мы опять получим проблему с русскими буквами:

Кроме того, при сохранении файла с программой в кодировке windows-866 мы получим множество проблем при работе с файлами и каталогами.

Преобразование кодировки в Windows производится автоматически после настройки локали (локальных настроек компьютера). Настроить локаль позволяет функция setlocale() . Прототип функции:

В первом параметре указывается категория в виде числа от 0 до 5 . Вместо чисел можно использовать макроопределения LC_ALL , LC_COLLATE , LC_CTYPE , LC_MONETARY , LC_NUMERIC и LC_TIME . Во втором параметре задается название локали, после которого через точку указывается кодировка файла с программой (например, Russian_Russia.1251 или Russian_Russia.866 ).

Пример настройки локали и вывода русских букв приведен в листинге 2.15.

Листинг 2.15. Настройка локали

После компиляции и запуска программы русские буквы будут правильно отображаться вне зависимости от текущей кодировки консоли:

Однако, программа может быть запущена на компьютере, в котором кодировка консоли не позволяет отобразить русские буквы. Единственный способ полностью решить проблему с кодировками — выводить сообщения на английском языке. Коды латинских букв во всех однобайтовых кодировках одинаковые, поэтому при использовании английского языка проблем не будет. Однако тут существует другая сложность. Пользователь может не знать английского языка. Как видите не все так просто с кодировками при использовании консольных приложений.

Учебник C++ (Qt Creator и MinGW)
Учебник C++ (Qt Creator и MinGW) в формате PDF

Помощь сайту

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

System chcp 1251 nul

Команда CHCP используется для просмотра или изменения текущей кодовой страницы в окне командной строки Windows. Кодовая страница (Code Page или сокращенно CP) определяет соответствие между двоичным кодом и соответствующим ему символом, отображаемом на экране. Для кодирования текстов на русском языке (то есть букв кириллицы) наиболее широко применяются следующие кодовые страницы:

— Windows-1251, она же Microsoft code page 1251 (CP1251) в операционных системах семейства Windows;

— Кодовая страница CP866, она же IBM code page 866 — в операционных системах семейства DOS, а также в приложениях командной строки Microsoft Windows;

Стандартно, в приложениях командной строки, используется кодовая страница 866 , что соответствует DOS-кодировке. Окно приложения CMD.EXE запускается с установленной кодовой страницей 866 . Изменение кодовой страницы действует только по отношению к текущему сеансу CMD.

Примеры использования команды CHCP:

chcp — отобразить текущую кодовую страницу.

chcp 1251 — установить кодовую страницу, соответствующую Windows-кодировке.

chcp 866 — установить кодовую страницу, соответствующую DOS-кодировке.

При создании командных файлов, необходимо учитывать то обстоятельство, что текст на русском языке должен быть представлен в DOS-кодировке.

В данной статье пойдёт речь о кодировках в Windows. Все в жизни хоть раз использовали и писали консольные приложения как таковые. Нету разницы для какой причины. Будь-то выбивание процесса или же просто написать «Привет. Я не могу сделать кодировку нормальной, поэтому я смотрю эту статью!».

Тем, кто ещё не понимает, о чём проблема, то вот Вам:

А тут было написано:

Но никто ничего не понял.

В любом случае в Windows до 10 кодировка BAT и других языков, не использует кодировку поддерживающую Ваш язык, поэтому все русские символы будут писаться неправильно.

1. Настройка консоли в батнике

Сразу для тех, кто пишет chcp 1251 лучше написать это:

Первый способ устранения проблемы, это Notepad++. Для этого Вам нужно открыть Ваш батник таким способом:

Не бойтесь, у Вас откроется код Вашего батника, а затем Вам нужно будет сделать следующие действия:

Если Вам ничего не помогло, то преобразуйте в UTF-8 без BOM.

2. Написание консольных программ
Нередко люди пишут консольные программы(потому что на некоторых десктопные писать невозможно), а кодировка частая проблема.

Первый способ непосредственно Notepad++, но а если нужно сначала одну кодировку, а потом другую?

Сразу для использующих chcp 1251 пишите это:

Второй способ это написать десктопную программу, или же использовать Visual Studio. Если же не помогает, то есть первое: изменение кодировки вывода(Пример на C++).

Если же не сработает:

3. Изменение chcp 1251
Если же у Вас батник, то напишите в начало:

Теперь у Нас будет нормальный вывод в консоль. На других языках (С++):

4. Сделать жизнь мёдом
При использовании данного способа Вы не сможете:

  • Разрабатывать приложения на Windows ниже 10
  • Спасти мир от данной проблемы
  • Думать о других людях
  • Разрабатывать десктопные приложения, так как Вам жизнь покажется мёдом
  • Сменить Windows на версию ниже 10
  • Ну и понимать людей, у которых Windows ниже 10

Установить Windows 10. Там кодировка консоли специально подходит для языка страны, и Вам больше не нужно будет беспокоиться об этой проблеме. Но у Вас появится ещё 6 проблем, и вернуться к предыдущей лицензионной версии Windows Вы не сможете.

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.

Здравствуйте.
В консольных программах не выводятся русские символы.
Думаю, виновата сама консоль — различная кодировка в консоли (CP-866) и Dev-е (CP-1251).
В нормальных текстовых редакторах всегда менял кодировку в настройках, тут не нашел.

В нете нашел какие-то русификаторы (может без них обойтись? ) или кучу пока непонятного мне кода (с подключением директив, массивами и т. д.) .

Короче, может нужно менять кодировку в консоли, либо в Dev-e. Как это сделать?
Благодарю за советы.

> Ну и если используешь printf, то юзай так:
printf("%lc
", 0x0450);

Пока только cout ))

Спасибо, разобрался. Вообщем не один вариант не работал, пока использовался точечный шрифт.
Поменял, все прекрасно заработало, но, если запускать проект из Dev-a (в нем тоже поменял) , все равно гад чушь выносит ))

Впрочем, лучше из консоли, так правильнее.
Спасибо Вам за помощь)

using namespace std;

int main() <
setlocale(LC_ALL, "");
cout
#include

using namespace std;

int main() <
system("chcp 1251 > nul");
cout
#include

using namespace std;

int main() <
locale::global(locale(""));
cout Остальные ответы

Структура программы на языке Си

Программа на языке Си состоит из одной или более подпрограмм, называемых функциями .

Язык Си является блочно-структурированным. Каждый блок заключается в фигурные скобки <> .

Основным блоком в программе консольного приложения на языке Си является главная функция, имеющая имя main() .

Каждое действие в языке Си заканчивается символом «точка с запятой» — ; . В качестве действия может выступать вызов функции или осуществление некоторых операций.

Имя функции — это коллективное имя группы описаний и операторов,
заключенных в блок (фигурные скобки). За именем функции в круглых скобках указываются параметры функции.

Комментарии в языке Си

В языке Си для комментариев используются символы

/* — начало комментария;
*/ — конец комментария.

Вся последовательность, заключенная между этими символами, является комментарием.

Это удобно для написания многострочных комментариев:

Многострочные комментарии также удобно использовать при отладке для сокрытия от выполнения части кода.

В дополнение к этому, для написания коротких комментариев могут использоваться символы // . При этом комментарием является все, что расположено после символов // и до конца строки:

Главная функция

При выполнении консольного приложения, написанного на языке Си, операционная система компьютера передаёт управление функции с именем main() . Функцию main() нельзя вызывать из других функций программы, она является управляющей.

Следующие за именем функции круглые скобки предназначены для указания параметров (аргументов), которые передаются в функцию при обращении к ней. В данном случае операционная система не передаёт в функцию main() никаких аргументов, поэтому список аргументов в круглых скобках пустой.

Главную функцию можно записать по-разному:

  • int main()
  • void main() .

Перед именем функции указывается тип возвращаемого значения. При обращении к главной функции значение возвращается операционной системе. Последняя запись не будет возвращать значения. Однако void main() — не совсем корректная запись, так как сообщает компилятору, что функция main() не возвращает никакого значения.

При этом запись int main() сообщает компилятору о возвращении целочисленного значения, которое необходимо операционной системе и сообщает ей о том, что программа завершилась корректно. Если же это значение не возвращено, то операционная система понимает, что программа завершилась в аварийном режиме.
Для возврата целочисленного значения перед завершением функции добавляется строка

В фигурные скобки заключены описания и операторы.

В общем случае программа может содержать несколько функций. Каждая функция имеет список передаваемых в нее параметров, указанный в круглых скобках, и набор операций, заключенных в блок, ограниченный фигурными скобками.

Пример: Вывод на экран сообщения "Hello, world!" .

Результат работы программы:
Результат работы Hello world

Теперь попробуем написать текст на русском языке.

Результат работы программы:
Результат работы Здравствуй, мир!
Проблема русского языка в консольных приложениях заключается в том, что консоль и редактор кода Microsoft Visual Studio поддерживают разные кодовые страницы. Для того, чтобы увидеть русские символы в консоли необходимо поменять кодовую страницу в консоли, чтобы она соответствовала кодовой странице редактора (1251). С этой целью вызывается функция system( "chcp 1251" ) с соответствующей командной строкой. Прототип функции system() содержится в библиотеке <stdlib.h> .

При этом текст программы будет выглядеть следующим образом:

Результат работы программы:
Результат работы Здравствуй, мир!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *