Как узнать кодировку в консоли windows

tsvety rozy buket 160259 1280x720 Windows

Не корректно отображается Русский текст в CMD? Решение есть!

Как корректно отобразить Русский текст в CMD. Проблемы с кодировкой могут возникнуть, например, при выполнении Bat файла, когда нужно вывести в консоль русский текст и при других обстоятельствах, о которых речь пойдёт далее.

Рассмотрим пример: когда нужно вывести в консоль Русский текст, скажем «Примет мир». Для этого создадим Bat файл с именем «1.bat». Используйте для этого обычный Блокнот Windows (Notepad.exe) Запишем в него следующие строки!

Для тех, кто не понял или не в курсе, строчки «echo.» я добавил специально, что бы были отступы, от строки «Примет мир»

Теперь запускаем файл 1.bat и результат будет такого вида.

1

Как видим проблема с кодировкой в cmd на лицо. И произошло это по следующей причине.

Стандартный блокнот Windows сохранил Bat файл в кодировке «1251» а консоль вывела его в кодировки «866». Вот от сюда все проблемы!

Решения проблемы с кодировкой в CMD. 1 Способ.

Для решения проблемы нужно просто использовать текстовой редактор, с помощью которого можно сохранить текст в кодировке «866». Для этих целей прекрасно подходит «Notepad++» (Ссылку для загрузки Вы можете найти в моём Twitter-e).

Скачиваем и устанавливаем на свой компьютер «Notepad++».

После запуска «Notepad++» запишете в документ те же строки, которые мы уже ранние записывали в стандартный блокнот.

Теперь осталось сохранить документ с именем «2.bat» в правильной кодировке. Для этого идём в меню «Кодировки > Кодировки > Кириллица > OEM-866»

21

и теперь сохраняем файл с именем «2.bat» и запускаем его! Поле запуска результат на лицо.

3

Как видим, текст на Русском в CMD отобразился, как положено.

Решения проблемы с кодировкой в CMD. 2 Способ.

Теперь рассмотрим ещё одну ситуацию, когда могут возникнуть проблемы с кодировкой в CMD.

Допустим, ситуация требует сохранить результат выполнения той или иной команды в обычный «TXT» файл. В приделах этого поста возьмём для примера команду «HELP».

Задача : Сохранить справку CMD в файл «HelpCMD.txt. Для этого создайте Bat файл и запишите в него следующие строки.

После выполнения Bat файла в корне диска «C:\» появится файл «HelpCMD.txt» и вместо справки получится вот что:

4

Естественно, такой вариант не кому не понравится и что бы сохранить справку в понятном для человека виде, допишите в Bat файл строку.

Теперь содержимое кода будет такое.

После выполнения «Батника» результат будет такой:

5

Вот так на много лучше, правда?

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

Дополнительно из комментариев то Garric

[HKEY_CLASSES_ROOT\.bat\ShellNew]
«FileName»=»BATНастроенная кодировка.bat»
——
Выполняем.
——
Топаем в %SystemRoot%\SHELLNEW
Создаём там файл «BATНастроенная кодировка.bat»
Открываем в Notepad++
Вводим любой текст. (нужно!) Сохраняемся.
Удаляем текст. Меняем кодировку как сказано в статье. Сохраняемся.
———-
Щёлкаем правой кнопкой мыши по Рабочему столу. Нажимаем «Создать» — «Пакетный файл Windows».
Переименовываем. Открываем в Notepad++. Пишем батник.
В дальнейшем при работе с файлом не нажимаем ничего кроме как просто «Сохранить». Никаких «Сохранить как».

Источник

chcp chcp

Изменяет активную кодовую страницу консоли. Changes the active console code page. Если используется без параметров, параметр chcp отображает номер активной кодовой страницы консоли. If used without parameters, chcp displays the number of the active console code page.

Синтаксис Syntax

Параметры Parameters

Параметр Parameter Описание Description
Задает кодовую страницу. Specifies the code page.
/? /? Отображение справки в командной строке. Displays help at the command prompt.

В следующей таблице перечислены поддерживаемые кодовые страницы и их страны, регионы или языки. The following table lists each supported code page and its country/region or language:

Кодовая страница Code page Страна, регион или язык Country/region or language
437 437 США United States
850 850 Многоязычная (латиница I) Multilingual (Latin I)
852 852 Славянские (латиница II) Slavic (Latin II)
855 855 Кириллица (Русский) Cyrillic (Russian)
857 857 Турецкий Turkish
860 860 Португальский Portuguese
861 861 Исландский Icelandic
863 863 Canadian-French Canadian-French
865 865 Скандинавская Nordic
866 866 русском языке Russian
869 869 Современный греческий Modern Greek
936 936 Китайский Chinese

Комментарии Remarks

В окне командной строки, использующем растровые шрифты, правильно отображается только кодовая страница изготовителя оборудования (OEM), установленная вместе с Windows. Only the original equipment manufacturer (OEM) code page that is installed with Windows appears correctly in a Command Prompt window that uses Raster fonts. Другие кодовые страницы отображаются правильно в полноэкранном режиме или в окнах командной строки, в которых используются шрифты TrueType. Other code pages appear correctly in full-screen mode or in Command Prompt windows that use TrueType fonts.

Вам не нужно подготавливать кодовые страницы (как в MS-DOS). You don’t need to prepare code pages (as in MS-DOS).

Программы, запускаемые после назначения новой кодовой страницы, используют новую кодовую страницу. Programs that you start after you assign a new code page use the new code page. Однако программы (кроме Cmd.exe), которые вы начали перед назначением новой кодовой страницы, продолжат использовать исходную кодовую страницу. However, programs (except Cmd.exe) that you started before assigning the new code page will continue to use the original code page.

Примеры Examples

Чтобы просмотреть текущую настройку кодовой страницы, введите: To view the active code page setting, type:

Появится сообщение следующего вида: Active code page: 437 A message similar to the following appears: Active code page: 437

Чтобы изменить активную кодовую страницу на 850 (многоязычный), введите: To change the active code page to 850 (Multilingual), type:

Если указанная кодовая страница является недопустимой, появляется следующее сообщение об ошибке: Invalid code page If the specified code page is invalid, the following error message appears: Invalid code page

Источник

Как я боролся с кодировками в консоли

В очередной раз запустив в Windows свой скрипт-информер для СамИздат-а и увидев в консоли «загадочные символы» я сказал себе: «Да уже сделай, наконец, себе нормальный кросс-платформенный логгинг!»

Об этом, и о том, как раскрасить вывод лога наподобие Django-вского в Win32 я попробую рассказать под хабра-катом (Всё ниженаписанное применимо к Python 2.x ветке)

Задача первая. Корректный вывод текста в консоль
Симптомы

До тех пор, пока мы не вносим каких-либо «поправок» в проинициализировавшуюся систему ввода-вывода и используем только оператор print с unicode строками, всё идёт более-менее нормально вне зависимости от ОС.

«Чудеса» начинаются дальше — если мы поменяли какие-либо кодировки (см. чуть дальше) или воспользовались модулем logging для вывода на экран. Вроде бы настроив ожидаемое поведение в Linux, в Windows получаешь «мусор» в utf-8. Начинаешь править под Win — вылезает 1251 в консоли…

Теоретический экскурс
Ищем решение

Очевидно, чтобы избавиться от всех этих проблем, надо как-то привести их к единообразию.
И вот тут начинается самое интересное:

Кроме того, как замечательно видно из примера, если в linux у нас везде utf-8, то в Windows — две разных кодировки — так называемая ANSI, она же cp1251, используемая для графической части и OEM, она же cp866, для вывода текста в консоли. OEM кодировка пришла к нам со времён DOS-а и, теоретически, может быть также перенастроена специальными командами, но на практике никто этого давно не делает.

До недавнего времени я пользовался распространённым способом исправить эту неприятность:

… и собрать всё вместе:

Задача вторая. Раскрашиваем вывод

Попробовав несколько из них, я, в итоге, воспользовался простейшим наследником StreamHandler, приведённом в одном из комментов на Stack Overflow и пока вполне доволен:

Однако, в Windows всё это работать, разумеется, отказалось. И если раньше можно было «включить» поддержку ansi-кодов в консоли добавлением «магического» ansi.dll из проекта symfony куда-то в недра системных папок винды, то, начиная (кажется) с Windows 7 данная возможность окончательно «выпилена» из системы. Да и заставлять юзера копировать какую-то dll в системную папку тоже как-то «не кошерно».

Снова обращаемся к гуглу и, снова, получаем несколько вариантов решения. Все варианты так или иначе сводятся к подмене вывода ANSI escape-последовательностей вызовом WinAPI для управления атрибутами консоли.

Побродив некоторое время по ссылкам, набрёл на проект colorama. Он как-то понравился мне больше остального. К плюсам именно этого проекта ст́оит отнести, что подменяется весь консольный вывод — можно выводить раскрашенный текст простым print u»\x1b[31;40mЧто-то красное на чёрном\x1b[0m» если вдруг захочется поизвращаться.

Сразу замечу, что текущая версия 0.1.18 содержит досадный баг, ломающий вывод unicode строк. Но простейшее решение я привёл там же при создании issue.

Собственно осталось объединить оба пожелания и начать пользоваться вместо традиционных «костылей»:

Дальше в своём проекте, в запускаемом файле пользуемся:

На этом всё. Из потенциальных доработок осталось проверить работоспособность под win64 python и, возможно, добаботать ColoredHandler чтобы проверял себя на isatty, как в более сложных примерах на том же StackOverflow.

Источник

Символы кириллицы в консоли Windows

Ходят упорные слухи, что в Linux нет проблем с работой с кириллицей в консоли. Эта статья для тех, кому повезло меньше — для виндузятников.

Проблема заключается в том, что когда в Microsoft придумывали Windows, то попутно придумали новую кодировку для кириллицы. Трудно сказать зачем, но придумали. А старую кодировку, которая использовалась в MS DOS, оставили. Видимо в целях обратной совместимости. И случилась жопа. С выходом новых версий Windows ситуация только ухудшилась. Т.к. консоль, уже как часть операционной системы, унаследовала кодировку кириллицы от MS DOS.

В итоге сейчас для кириллицы имеем две кодировки: cp866 — старая досовская кодировка и cp1251 (она же windows-1251) — новая, от Windows. В настоящее время дело осложняется тем, что окончательно созрел Unicode, что дает еще несколько кодировок не совместимых с cp1251 и с cp866, и не совсем совместимых между собой. Но о Unicode как-нибудь в другой раз.

Кстати, буковки «cp» в названии кодировки означает codepage — кодовая страница в смысле «страница кодировки символов».

Итак, при написании программ строки могут встречаться в двух различных кодировках в следующих местах:

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

Первое правило при работе с национальными алфавитами: все строки должны быть в единой кодировке.

При несоблюдении этого правила будет невозможно сравнение и сортировка строк (а также и символов), и будет затруднён корректный ввод и вывод строк на консоль или в файл.

Еще один подводный камень:

В окне консоли, использующем растровые шрифты (Raster fonts), корректно отображается только кодовая страница оригинального производителя оборудования (OEM), установленная с Windows XP. Другие кодовые страницы отображаются корректно в полноэкранном режиме или в окне консоли, которое использует шрифты True Type.

При этом в самой консоли отображение кириллицы при вводе (в командной строке) работает даже при использовании растровых шрифтов.

Второе правило при работе с национальными алфавитами: в настройках консоли установите для вывода шрифт True Type.

Сделать это можно следующим способом:

И еще. Похоже, что ни Unicode, ни UTF-8, ни мультибайтовые строки в консоли напрямую не поддерживаются. По крайней мере, у меня с ними ничего путного не вышло.

Далее несколько советов для борьбы с этими проблемами.

Самый простой (и самый неудобный) способ

Работать в «родной» для консоли кодовой странице, в cp866. Т.е. все строки с кириллицей в исходном коде программы должны быть написаны в кодировке cp866. В этой же кодировке должны быть все входные файлы для программы. И в этой же кодировке будут и все выходные файлы. Полное впечатление, что мы вернулись на 20 лет назад, в MS DOS.

Если под рукой есть IDE, которая работает в консоли — особых проблем не возникнет. Если же использовать среду разработки под Windows GUI, то возникают вполне понятные сложности, поскольку IDE обычно работают в кодировке cp1251, «родной» для Windows. Кстати, как бы ни хаяли MS Visual Studio, она умеет работать с исходными текстами программ в различных кодировках, корректно их отображая в своем редакторе.

Вывод на консоль Windows 7

Способ подходит, если необходим только вывод кириллицы на консоль, и вы работаете под Windows 7. Под Windows XP это не работает (прим. редактора — все работает).

Самое простое — использовать функцию setlocale() :

Функция setlocale() устанавливает или изменяет для текущей программы информацию о национальной специфике (то, что задается в апплете Region and Language в Control panel). Описание функции можно найти в MSDN.

Также популярен урезанный вариант вызова:

Здесь используется, что символ LC_ALL равен 0 и подразумевается, что в операционной системе установлена страна пребывания Россия (локализация самой Винды роли не играет). Но лучше все-таки использовать полную форму.

Функция достаточно капризная. Это касается второго параметра. Некоторые значения, которые указаны в документации, могут на каких-то системах (компиляторах?) не работать.

Ввод и вывод на консоль

В качестве единственного параметра обеим функциям передается номер кодовой страницы. В нашем случае (кириллица) — это 1251.

Этот способ работает и для Windows XP, и для Windows 7. Опробовано с Dev-C++ 5.6.3 (компилятор TDM-GCC 4.8.1 и MS Visual Studio 2012.

Следующая тестовая программа демонстрирует вывод кириллицы на консоль, ввод кириллической строки с консоли, контрольный вывод введенной строки, сравнение введенной строки с эталонной и вывод введенной строки в файл.

Исходный текст в кодировке cp1251:

Эта программа также удобна для экспериментов с различными кодовыми таблицами и их сочетаниями.

Для практических целей можно использовать шаблон:

Функции перекодировки

В Windows API есть две (а точнее, четыре пары) функции, осуществляющие перекодировку OEM ANSI (так сказано в документации). Проще говоря, в контексте рассматриваемого вопроса, это перекодировка между cp866 (OEM) и cp1251 (ANSI).

«Опасные» функции без контроля длины строки:

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

«Безопасные» функции с контролем длины строки:

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

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

P. S. Не судите строго — это мой первый опыт в написании статьи. Я так посмотрел, люди пишут, а чем я хуже? Тем более, что появилось чем поделиться. А оказалось, что это трудно. И написать, и ошибки проверить, и иллюстрации подготовить.

На написание статьи меня сподвиг вопрос о «кракозябрах в XP». Под это дело из руин даже был извлечен старый комп с XP. И оказалось, что проблема действительно имеет место. Пришлось провести небольшое исследование, результаты которого я здесь и изложил. Также скомпилировал доступную информацию по этой теме из материалов сайта, что бы все было в одном месте. Насколько у меня это получилось — решать вам. Буду рад замечаниям и дополнениям в комментариях к статье.

Источник

Запуск консольной программы с кодировкой win1251

Есть исполняемый файл консольной windows программы. В программе есть сообщения кириллицей в кодировке win-1251. При этом программа в процессе работы создает тектовый файл с данными. Для корректного отображения текста как в консоли так и в текстовом файле нужно запустить программу в терминале с предустановленной кодировкой win-1251. Сделать это можно командой chcp 1251.

Просьба написать текст такого bat файла.

ps Файл должен получиться короткий, прошу помочь, у меня винды нет, пользователь другой ОС.

Автоматизация консольной программы
Нужна помощь с консольной программой mkvmerge. К ней имеется предположим данные параметры.

tickЗапуск и получение данных от консольной программы
Есть консольная программа *.exe написанная на C, выводит в консоль 2 строки. Нужно из программы на.

Запуск и получение данных из консольной программы *.exe
Есть консольная программа *.exe написанная на C, выводит в консоль 2 строки. Нужно из программы на.

Запуск консольной программы из программы
Добрый день Всем! Хотел изнутри Qt-шной программы запустить следующую команду под Виндой: echo.

Решение

Отчасти да, отчасти нет.

programma.exe может быть скомпилирована c любой кодировкой, но суть именно в том, что бы корректно отображалась кириллица как в терминале, так и в создаваемом этой программой текстовом файле, поэтому нужна кодировка win-1251.

Другой путь, без bat файла, можно скомпилировать программу с кодировкой CP866. В этом случае вывод данных в консоль будет производится корректно, но для корректности вывода сообщений в текстовый файл в программу придется встраивать модуль перекодирования 866-1251, это сделать можно, но больше возни и меньше универсальности. Хотя не исключено, что попробую оба метода.

Добавлено через 3 минуты

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

Это специализированный математический расчет из области электротехники. Вряд ли это кому то интересно и важно в контексте данной темы.

Работу bat файла и первого прообраза программы попробовал на винде. Возник вопрос.

1. Запуском bat файла запускается консоль
2. Меняется кодировка на win-1251 (проверил это подстановкой в bat файл команд chcp и pause перед запуском файла programma.exe)
3. Программа запускается с корректным отображением кириллицы

Кодовая страница консоли по умолчанию 866, то же проверено (это видно во время паузы, по команде chcp пишется что то вида: «╪шЁюър¤ых 1251» вместо «кодовая страница 1251»).

Фокус в том, что программа скомпилирована с кодировкой CP866 для тестирования с непосредственным запуском, без bat-файла.
Т.е. в первом варианте я непосредственно мышью запускаю programma.exe и вижу корректное отображение. Во втором варианте я запускаю ее же через bat файл со сменой кодировки в 1251 и то же вижу корректное отображение кириллицы. В чем подвох?

ps вывод в файл на винде еще не проверен, эта возможность есть только в следующей версии программы, пока существующей только в linux версии.

Источник

Читайте также:  Как удалить libreoffice из windows 10
RUSТехника