кракозябры в командной строке windows 10
Кракозябры в командной строке cmd. Проблемы с кодировкой cmd.exe
Выполняю cmd и в нем set, хочу узнать USERNAME. Но оно показывается в непонятной кодировке.
Оказывается надо в свойствах самого cmd выбрать шрифт Lucida Console. Только так можно получить нормальный текст на русском языке.
Спасшая статья:
Запустить командную строку можно следующим способом: Пуск → Выполнить → вводим в поле команду – cmd и жмем ОК. В итоге откроется рабочее окно программы – c:\WINDOWS\system32\cmd.exe. ( рис.1)
Перейдем собственно к проблеме: иногда вместо русских букв при выполнении команд выходит набор непонятных символов ( рис.2).
Первым делом нужно зайти в свойства окна – правой кнопкой щелкнуть по верхней части окна → Свойства → выйдет окно рис.3, здесь в поле Шрифтвыбираем Lucida Console и жмем ОК.
Теперь Вы получили нормальный текст на русском языке. Так же можно поменять текущую кодировку шрифта, для этого используется команда chcp. Набираем эту команду и жмем Enter, в результате получим текущую кодировку для командной строки – рис.4.
Для изменения кодировки так же применим chcp в следующем формате:
Где – это цифровой параметр нужного шрифта, например,
1251 – Windows (кириллица);
Выбирайте на любой вкус. Т.о. что бы изменить кодировку на UTF-8 нужно выполнить команду chcp 65001.
almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.
Кракозябры в командной строке cmd. Проблемы с кодировкой cmd.exe
Приложение cmd.exe – это командная строка или программная оболочка с текстовым интерфейсом (во загнул 🙂 ).
Запустить командную строку можно следующим способом: Пуск →Выполнить → вводим в поле команду – cmd и жмем ОК. В итоге откроется рабочее окно программы – c:\WINDOWS\system32\cmd.exe.
Если Вы занялись проблемой кодировки шрифтов в cmd.exe, то как запускать командную строку наверняка уже знаете 🙂
Перейдем собственно к проблеме: иногда вместо русских букв при выполнении команд выходит набор непонятных символов
Первым делом нужно зайти в свойства окна – правой кнопкой щелкнуть по верхней части окна → Свойства → выйдет окно рис.3, здесь в поле Шрифт выбираем Lucida Console и жмем ОК.
Теперь Вы получили нормальный текст на русском языке. Так же можно поменять текущую кодировку шрифта, для этого используется команда chcp. Набираем эту команду и жмем Enter, в результате получим текущую кодировку для командной строки
Для изменения кодировки так же применим chcp в следующем формате:
Chcp
Где – это цифровой параметр нужного шрифта, например,
Выбирайте на любой вкус. Т.е. что бы изменить кодировку на UTF-8 нужно выполнить команду chcp 65001.
Dragonid
Меня зовут Владимир, и я являюсь разработчиком сайта и YuoTube-канала «Помощь с компьютером». Моя цель помогать всем у кого возникают проблемы или вопросы, связанные с ПК. Я стараюсь развиваться всесторонне и люблю получать новые знания. Знать всё невозмо Смотреть все записи автора Dragonid
Кракозябры в командной строке windows 10
Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов по системному администрированию Pyatilistnik.org. В прошлый раз я вам подробно рассказывал, как диагностировать вашу систему, когда у вас нет интернета, судя по комментариям данный материал оказался полезным. Не так давно один из моих приятелей задал мне вопрос, почему при сохранении текстового файла с выводом результатов из командной стоки Windows у него вместо русского языка, отображается какая-то кракозябра. Давайте я покажу, как выкручиваться из данной ситуации.
Описание проблемы
Мой приятель делал диагностику репликации Active Directory и так как полученная диагностическая информация была объемной, он логично попытался сохранить ее в текстовый файл. Напоминаю делается, это вот по такой конструкции:
Тут > c:\temp\replsummary.log и есть функция вывода в файл.
При открытии файла он увидел вот такую абракадабры вместо русского текста:
Ќ з в бЎ®а ¤ ле ¤«п бў®¤ЄЁ Ї® ९«ЁЄ жЁЁ, Ї®¤®¦¤ЁвҐ:
.
€бе®¤л© DSA ЁЎ. ¤Ґ«мв бЎ®Ґў/ўбҐЈ® %% ®иЁЎЄ
Согласитесь, что это не очень красиво и читаемо.
Варианты устранения краскозябр в файле после экспорта из cmd
Первый вариант, это использование оболочки PowerShell. PowerShell умеет запускать большую часть утилит, к которым вы привыкли в командной строке, у него для этого есть алиасы в виде командлетов. Самое классное, что в отличии от cmd он сохраняет данные в нормальном виде, даже если они по русски. Для примера я выполню в PowerShell предыдущую команду;
В результате вы сразу можете оценить его преимущество и еще раз задуматься, чтобы использовать его.
Так же вы можете использовать командлет PowerShell под названием Out-File, он позволяет производить вывод полученных данных в виде файла, единственное не забываем указать нужное место, так же если места нет, вы его можете создать с помощью ключа -Force.
Если же вы хотите использовать именно командную строку, то вам необходимо перед вашей командой или в скрипте в самом начале выполнить вот эти строки:
В результате чего на выходе я получил положительный результат и никакой абракадабры вместо русского текста я не увидел.
Вот пример бат файла, где я использовал кодировку chcp 855.
Убираем кракозябры через реестр
В реестре Windows есть ветка «HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe», где вы можете создать ключ CodePage со значением 855. Напоминаю, что из себя представляют эти трехзначные цифры, обратите внимание, что 855 это именно кириллица (Дополнительно можно почитать https://docs.microsoft.com/en-us/windows/win32/intl/code-page-identifiers ).
В командной строке от имени администратора выполните команду по добавлению ключа:
Выглядеть это будет вот так
Так же создать ключ реестра можно и через PowerShell, вот такими командами:
Гарантированная локализация/русификация консоли Windows
Введение
Данный материал не предлагает строгий алгоритм действий, а направлен на описание узловых проблем, с которыми неизбежно сталкивается разработчик локализованного консольного приложения, а также некоторые возможные пути их разрешения. Предполагается, что это позволит разработчику сформировать стратегию работы с локализованной консолью и эффективно реализовать существующие технические возможности, большая часть которых хорошо описана и здесь опущена.
Виды консолей
В общем случае функции консоли таковы:
управление операционной системой и системным окружением приложений на основе применения стандартных системных устройств ввода-вывода (экран и клавиатура), использования команд операционной системы и/или собственно консоли;
запуск приложений и обеспечение их доступа к стандартным потокам ввода-вывода системы, также с помощью стандартных системных устройств ввода-вывода.
Отдельным видом консоли можно считать консоль отладки Visual Studio (CMD-D ).
Конфликт кодировок
Совет 1. Выполнять разработку текстовых файлов (программных кодов, текстовых данных и др.) исключительно в кодировке UTF-8. Мир любит Юникод, а кроссплатформенность без него вообще невозможна.
Совет 2. Периодически проверять кодировку, например в текстовом редакторе Notepad++. Visual Studio может сбивать кодировку, особенно при редактировании за пределами VS.
Поскольку в консоли постоянно происходит передача управления от приложений к собственно командному процессору и обратно, регулярно возникает «конфликт кодировок», наглядно иллюстрируемый таблица 1 и 2, сформированных следующим образом:
Команды и код приложения под катом
> Echo ffffff фффффф // в командной строке
PS> Echo ffffff фффффф // в PowerShell
код тестового приложения:
Командную часть задания все консоли локализовали практически без сбоев во всех кодировках, за исключением: в WPS неверно отображена русскоязычная часть команды во всех кодировках.
Табл. 1. Результат выполнения команды консоли Echo ffffff фффффф
Вывод тестового приложения локализован лишь в 50% испытаний, как показано в табл.2.
Табл. 2. Результат запуска приложения LoggingConsole.Test
Сoвет 3. Про PowerShell забываем раз и навсегда. Ну может не навсегда, а до следующей мажорной версии.
По умолчанию Windows устанавливает для консоли кодовые страницы DOS. Чаще всего CP437, иногда CP866. Актуальные версии командной строки cmd.exe способны локализовать приложения на основе русифицированной кодовой страницы 866, но не 437, отсюда и изначальный конфликт кодировок консоли и приложения. Поэтому
Проблемы консолей Visual Studio
Отдельной опцией Visual Studio является встроенная односеансная консоль отладки, которая перехватывает команду Visual Studio на запуск приложения, запускается сама, ожидает компиляцию приложения, запускает его и отдает ему управление. Таким образом, отладочная консоль в течение всего рабочего сеанса находится под управлением приложения и возможность использования команд Windows или самой консоли, включая команду CHCP, не предусмотрена. Более того, отладочная консоль не воспринимает кодовую страницу по умолчанию, определенную в реестре, и всегда запускается в кодировке 437 или 866.
Совет 6. Тестирование приложения целесообразно выполнять во внешних консолях, более дружелюбных к локализации.
Локализация отладочной консоли Visual Studio
Ниже приведен пример вывода тестового приложения в консоль, иллюстрирующий изложенное. Метод Write получает номера текущих страниц, устанавливает новые кодовые страницы вводного и выводного потоков, выполняет чтение с консоли и записывает выводную строку, содержащий русский текст, в том числе считанный с консоли, обратно в консоль. Операция повторяется несколько раз для всех основных кодовых страниц, упомянутых ранее.
приложение запущено в консоли с кодовыми страницами 1251 (строка 2);
приложение меняет кодовые страницы консоли (current, setted);
приложение остановлено в консоли с кодовыми страницами 1252 (строка 11, setted);
Приложение адекватно локализовано только в случае совпадения текущих кодовых страниц консоли (setted 1251:1251) с начальными кодовыми страницами (строки 8 и 10).
Код тестового приложения под катом
Совет 7. Обязательный и повторный! Функции SetConsoleCP должны размещаться в коде до первого оператора ввода-вывода в консоль.
Стратегия локализации приложения в консоли
Удалить приложение PowerShell (если установлено), сохранив Windows PowerShell;
Установить в качестве кодовую страницу консоли по умолчанию CP65001 (utf-8 Unicode) или CP1251 (Windows-1251-Cyr), см. совет 5;
Разработку приложений выполнять в кодировке utf-8 Unicode;
Контролировать кодировку файлов исходных кодов, текстовых файлов данных, например с помощью Notepad++;
Реализовать программное управление локализацией приложения в консоли, пример ниже под катом:
Пример программной установки кодовой страницы и локализации приложения в консоли
Не корректно отображается Русский текст в CMD? Решение есть!
Как корректно отобразить Русский текст в CMD. Проблемы с кодировкой могут возникнуть, например, при выполнении Bat файла, когда нужно вывести в консоль русский текст и при других обстоятельствах, о которых речь пойдёт далее.
Рассмотрим пример: когда нужно вывести в консоль Русский текст, скажем «Примет мир». Для этого создадим Bat файл с именем «1.bat». Используйте для этого обычный Блокнот Windows (Notepad.exe) Запишем в него следующие строки!
Для тех, кто не понял или не в курсе, строчки «echo.» я добавил специально, что бы были отступы, от строки «Примет мир»
Теперь запускаем файл 1.bat и результат будет такого вида.
Как видим проблема с кодировкой в cmd на лицо. И произошло это по следующей причине.
Стандартный блокнот Windows сохранил Bat файл в кодировке «1251» а консоль вывела его в кодировки «866». Вот от сюда все проблемы!
Решения проблемы с кодировкой в CMD. 1 Способ.
Для решения проблемы нужно просто использовать текстовой редактор, с помощью которого можно сохранить текст в кодировке «866». Для этих целей прекрасно подходит «Notepad++» (Ссылку для загрузки Вы можете найти в моём Twitter-e).
Скачиваем и устанавливаем на свой компьютер «Notepad++».
После запуска «Notepad++» запишете в документ те же строки, которые мы уже ранние записывали в стандартный блокнот.
Теперь осталось сохранить документ с именем «2.bat» в правильной кодировке. Для этого идём в меню «Кодировки > Кодировки > Кириллица > OEM-866»
и теперь сохраняем файл с именем «2.bat» и запускаем его! Поле запуска результат на лицо.
Как видим, текст на Русском в CMD отобразился, как положено.
Решения проблемы с кодировкой в CMD. 2 Способ.
Теперь рассмотрим ещё одну ситуацию, когда могут возникнуть проблемы с кодировкой в CMD.
Допустим, ситуация требует сохранить результат выполнения той или иной команды в обычный «TXT» файл. В приделах этого поста возьмём для примера команду «HELP».
Задача : Сохранить справку CMD в файл «HelpCMD.txt. Для этого создайте Bat файл и запишите в него следующие строки.
После выполнения Bat файла в корне диска «C:\» появится файл «HelpCMD.txt» и вместо справки получится вот что:
Естественно, такой вариант не кому не понравится и что бы сохранить справку в понятном для человека виде, допишите в Bat файл строку.
Теперь содержимое кода будет такое.
После выполнения «Батника» результат будет такой:
Вот так на много лучше, правда?
Пожалуй, на этом я закончу пост. Добавить больше нечего. Если у Вас имеются какие-то соображения по данной теме, буду рад Вашему комментарию к посту.
Дополнительно из комментариев то Garric
[HKEY_CLASSES_ROOT\.bat\ShellNew]
«FileName»=»BATНастроенная кодировка.bat»
——
Выполняем.
——
Топаем в %SystemRoot%\SHELLNEW
Создаём там файл «BATНастроенная кодировка.bat»
Открываем в Notepad++
Вводим любой текст. (нужно!) Сохраняемся.
Удаляем текст. Меняем кодировку как сказано в статье. Сохраняемся.
———-
Щёлкаем правой кнопкой мыши по Рабочему столу. Нажимаем «Создать» — «Пакетный файл Windows».
Переименовываем. Открываем в Notepad++. Пишем батник.
В дальнейшем при работе с файлом не нажимаем ничего кроме как просто «Сохранить». Никаких «Сохранить как».