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

System chcp 1251 c что это

  • автор:

CHCP – просмотр или изменение кодовой страницы в командной строке Windows.

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

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

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

— Кодовая страница CP65001, она же Unicode, UTF-8 — в современных операционных системах семейства Microsoft Windows;

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

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

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

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

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

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

Некоторые приложения командной строки Windows 7 и более поздних версий выводят текст в кодировке Unicode, что требует установки соответствующей кодовой страницы командой chcp 65001

chcp

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

Синтаксис

chcp [] 

Параметры

Параметр Описание
Указывает кодовую страницу.
/? Отображение справки в командной строке.

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

Кодовая страница Страна или регион или язык
437 Соединенные Штаты
850 Многоязычный (латиница)
852 Славянская (латиница II)
855 Кириллица (русский)
857 Турецкий
860 Португальский
861 Исландский
863 Канадский французский
865 Северной
866 русский
869 Современный греческий
936 Китайский
Замечания
  • В окне командной строки отображается только кодовая страница изготовителя оборудования (OEM), установленная с Windows, в окне командной строки с использованием растровых шрифтов. Другие кодовые страницы отображаются правильно в полноэкранном режиме или в окнах командной строки, использующих шрифты TrueType.
  • Вам не нужно подготовить кодовые страницы (как в MS-DOS).
  • Программы, начинающиеся после назначения новой кодовой страницы, используют новую кодовую страницу. Однако программы (кроме Cmd.exe), запущенные перед назначением новой кодовой страницы, будут продолжать использовать исходную кодовую страницу.

Примеры

Чтобы просмотреть параметр активной кодовой страницы, введите следующее:

chcp 

Появится сообщение, аналогичное следующему: Active code page: 437

Чтобы изменить активную кодовую страницу на 850 (многоязычный), введите:

chcp 850 

Если указанная кодовая страница недопустима, появится следующее сообщение об ошибке: Invalid code page

Дополнительные ссылки

  • Условные обозначения синтаксиса команд командной строки
  • BitFields кодовой страницы
  • Идентификаторы кодовой страницы

Проблемы с кодировкой Windows-1251

введите сюда описание изображения

Русские символы возвращают отрицательные коды, вместо кодов от 192 до 255. system(«chcp 1251»); прописано. Как использовать нормальные коды вместо отрицательных?

Отслеживать
задан 14 ноя 2020 в 10:29
Используйте unsigned char .
14 ноя 2020 в 10:31
Используйте wchar_t
14 ноя 2020 в 10:32
нет, скорее всего нужно «%u»,(unsigned int)c
14 ноя 2020 в 10:50

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

/* Если у вас Windows. Вот так и printf("Введите:"); не будет выводить краказябры и коды символов будут такие как вы хотите. */ #include #include #include #include #include #include int main(void) < setlocale(LC_CTYPE, "RU"); SetConsoleCP(1251); SetConsoleOutputCP(1251); int total=-1; wchar_t ch; printf("Введите текст:\n"); while((ch=getchar( ))!='\n') < total++; if(total%8==0) putchar('\n'); putchar(ch); printf("-%d ",ch); >return 0; > 

Отслеживать
ответ дан 6 июл 2021 в 5:44
57 5 5 бронзовых знаков

Вы понимаете разницу между кодировками? Чем отличается MultiByte от Unicode? Такой ерунды я ещё не видел. Помимо этого читайте вопрос и отвечайте именно на вопрос, а не предлагайте сделать из X, Y.

– user206435
6 июл 2021 в 5:52

В вопросе человек попросил помочь использовать коды символов такие как ему хочется. Я показал какие файлы заголовка надо подключать и как представлять переменную. И представил готовый код без заморочек который выводит сразу всё как надо. Какие ещё могут быть вопросы о кодировках и прочих высших материях. Уберите свой минус и не несите чепуху.

6 июл 2021 в 5:57

И сами внимательно читайте вопрос автора. Никто никого не просит устраивать ликбез по кодировкам. Вопрос простой . «Как использовать нормальные коды вместо отрицательных?» Цитирую для особо одарённых.

6 июл 2021 в 6:09
Если вы до сих пор работаете на М5000 это совсем не значит что так должны делать все.
6 июл 2021 в 6:31

getchar возвращает букву типа char , записанную в тип int . Вы зачем-то этот int пишете в переменную типа wchar_t . Это совсем не в тему. Функция putchar берёт тип int переводит в char и печатает. Правильно так : int ch;

System chcp 1251 c что это

Из моих записок про самообучение C++. Дата первой публикации: 03.02.2019.

Консольная программа выдает кракозябры 3.3

Второй способ решения проблемы (окончание)

Начало можно прочитать в этой записи, вторая часть, начало и продолжение третьей части. Если во второй части мы подстраивали выводимый в командную строку Windows 7 (cmd.exe) текст под кодировку из группы кодировок OEM (866), то здесь настраиваем из нашей программы кодировку командной строки под нужную нам кодировку из группы кодировок ANSI (1251). Это тоже можно сделать несколькими способами, один из которых мы рассмотрели в начале третьей части, второй — в продолжении третьей части.

Функция system и команда chcp

Функция system (ее описание на сайте компании Microsoft) входит в стандарт языка Си и стандарт языка С++ и используется для передачи команд интерпретатору командной строки (в нашем случае — cmd.exe).

Для решения проблемы кракозябр можно применить команду chcp интерпретатора командной строки (ее описание на сайте компании Microsoft). С помощью этой команды можно переключить кодировку консоли на нужную. В описании этой команды приведен неполный список идентификаторов кодовых страниц, более полный можно посмотреть здесь.

При использовании функции system и команды chcp следует учитывать все замечания, которые были сделаны в предыдущей записи касательно функций SetConsoleOutputCP и SetConsoleCP из набора Windows API. А именно: для работы этого способа требуется настроить шрифт консоли на один из предложенных в окне свойств консоли моноширинных юникодных шрифтов (вручную или программно, подробности описаны в предыдущей записи); способ работает при переключении языка системы (system locale); требуется аккуратность при совместном использовании с функцией переключения локали setlocale.

Возьмем программу из предыдущей записи; уберем подключение windows.h, так как функция system, как уже упоминалось выше, входит в стандарт языка C++; и заменим вызов функций SetConsoleOutputCP и SetConsoleCP на вызов функции system. Получим следующее (шрифт Lucida Console в консоли выберем вручную, если он еще там не выбран):

#include using namespace std; int main() < char str[80]; // для вводимой строки struct lconv * lc; // структура с настройками локали // передаем команду интерпретатору командной строки system(«chcp 1251»); cout // 1251 cout // вывод обозначения валюты при локали «Английский (США)» cout int_curr_symbol // вывод обозначения валюты при локали «Русский (Россия)» setlocale(LC_ALL, «ru-RU»); lc = localeconv(); cout int_curr_symbol

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

На картинке видно, что кроме переключения кодировки команда chcp печатает в консоль после переключения кодировки сообщение «Текущая кодовая страница: 1251». Для подавления вывода этого сообщения можно использовать перенаправление вывода на несуществующее устройство nul:

system("chcp 1251 > nul");

Результат работы программы после внесения вышеуказанного изменения:

Либо для подавления вывода ненужного сообщения можно сразу после переключения кодировки вообще очистить консоль с помощью команды cls:

system("chcp 1251"); // переключить кодировку system("cls"); // очистить окно консоли 

Результат работы программы после внесения вышеуказанного изменения:

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

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