
Столкнулся с проблемой отображения кракозябров в cmd в Windows 7. Как исправить надо.
chcp 866; chcp 1251; chcp 65001 – не помогали.
Оказывается надо в свойствах самого cmd выбрать шрифт Lucida Console!!!
Только так можно получить нормальный текст на русском языке.
Командная строка Windows является стандартным средством диагностики, настройки и управления компонентами операционной системы и прикладным программным обеспечением. В отличие от графической среды пользователя, командная строка является более гибким и универсальным инструментом, позволяющим решать многие задачи администрирования системы стандартными средствами Windows без установки дополнительного программного обеспечения.
Введение
Консольные приложения до сих пор остаются наиболее востребованным видом приложений, большинство разработчиков оттачивают архитектуру и бизнес-логику именно в консоли. При этом они нередко сталкиваются с проблемой локализации – русский текст, который вполне адекватно отражается в исходном файле, при выводе на консоль приобретает вид т.н. “кракозябр”.
В целом, локализация консоли Windows при наличии соответствующего языкового пакета не представляется сложной. Тем не менее, полное и однозначное решение этой проблемы, в сущности, до сих пор не найдено. Причина этого, главным образом, кроется в самой природе консоли, которая, являясь компонентом системы, реализованным статическим классом System. Console, предоставляет свои методы приложению через системные программы-оболочки, такие как командная строка или командный процессор (cmd.exe), PowerShell, Terminal и другие.
По сути, консоль находится под двойным управлением – приложения и оболочки, что является потенциально конфликтной ситуацией, в первую очередь в части использования кодировок.
Данный материал не предлагает строгий алгоритм действий, а направлен на описание узловых проблем, с которыми неизбежно сталкивается разработчик локализованного консольного приложения, а также некоторые возможные пути их разрешения. Предполагается, что это позволит разработчику сформировать стратегию работы с локализованной консолью
и эффективно реализовать существующие технические возможности, большая часть которых хорошо описана и здесь опущена.
Команда MOVE – переименование или перемещение файлов и каталогов
MOVE
Перемещение одного или более файлов:
Параметры командной строки:
Назначение
– Определяет новое местоположение файла. Назначение может состоять из буквы диска (с последующим двоеточием), имени папки или их комбинации. При
перемещении только одного файла, можно указать и его новое имя, если хотите выполнить его одновременное переименование при перемещении.
новое_имя_папки
– Определяет новое имя папки.
/Y
– Перезаписывать существующие файлы назначения без предупреждения.
/-Y
– Предупреждать при перезаписи существующего файла назначения.
Ключ /Y может присутствовать в значении переменной среды окружения COPYCMD
.
Оно может перекрываться ключом /-Y в командной строке. По умолчанию
используется предупреждение о перезаписи, если только команда MOVE не
выполняется как часть пакетного файла.
move /?
– отобразить подсказку по использованию команды.
move folder1 folder2
– переименовать папку с именем folder1
в folder2
в текущем каталоге.
move E:\test\folder1 E:\test\folder2
– переименование с указанием абсолютных путей.
move C:\file1.txt D:\
– переместить файл file1.txt
с диска C:
на диск D:
move c:\test\file1.txt D:\folder2\file2.txt
– перенести файл file1.txt
из каталога
test
диска C:
в каталог folder2
диска D:
под именем file2.txt
move C:\Folder1\*.* D:\Folder2\
– переместить все файлы из каталога Folder1
диска C: в каталог Folder2
диска D:
Реализация в ОС Windows данной команды не позволяет перемещать папки на другие логические диски.
move C:\folder1 C:\folder2\folder3\folder1
– переместить каталог folder1
из корня диска C:
в подкаталог \folder2\folder3
При перемещении папки в несуществующий каталог он не будет создан автоматически и команда завершится ошибкой.
Команда move
не работает с файлами, имеющими атрибуты “скрытый ” и “системный”.
Весь список команд CMD Windows
CD
CHDIR
Формат командной строки:
CD диск:
Команда CD
без параметров отображает имена текущих диска и каталога.
Параметр /D
используется для одновременной смены текущих диска и каталога.
Изменение команды CHDIR
при включении расширенной обработки команд:
Имя текущего каталога в строке вызова преобразуется к тому же регистру
символов, что и для существующих имен на диске. Так, команда CD C:\TEMP
или cd c:\temp
на самом деле сделает текущим каталог C:\Temp
, если он существует на диске.
Команда CHDIR перестает рассматривать пробелы как разделители, что позволяет
перейти в подкаталог, имя которого содержит пробелы, не заключая все имя
каталога в кавычки. Например:
приводит к тому же результату, что и:
При отключении расширенной обработки команд нужно использовать путь, заключенный в двойные кавычки.
CD /D X:\data
– сделать текущим каталог data
на диске X: . Результат использование ключа /D
зависит от версии команды. Для того чтобы сменить текущий каталог, на каталог, размещенный на другом диске, надежнее использовать последовательность команд смены текущего диска и смены каталога:
X:
– сделать текущим диском диск X:
CD X:\DATA
– сделать текущим каталогом X:\DATA
CD %WINDIR%
– сделать текущим каталогом каталог, каталог, задаваемый значением
переменной среды %WINDIR% (каталог Windows) . При использовании переменных, желательно их имена заключать в двойные кавычки, поскольку принимаемые значения могут содержать пробелы:
CD “%TEMP%”
CD C:\
– перейти в корневой каталог диска C: . Если в параметре команды задан путь без указания диска, по предполагается, что переход выполняется в каталог, расположенный относительно текущего на данный момент времени :
CD system32
– перейти в каталог system32
, являющийся подкаталогом текущего каталога
CD .
– если вместо имени каталога заданы две точки, то будет выполнен переход в родительский каталог ( на один уровень вверх).
Весь список команд CMD Windows
I’m using cmd.exe
(C:\WINDOWS\System32\cmd.exe) and I have to change my current directory to “D:\temp” i.e. temp folder in the D drive.
When I try to cd
nothing happens.
C:\> cd D:\temp
C:\> I don’t know what else to do here. Even pressing tab
key does not give any hints. I have never got the reason to use cmd.exe until now when I have to. I mostly use Linux for development.
If this helps: I’m on a remote login to another computer and D:\temp
in on the remote machine, but so is C:\
where I have opened the terminal (cmd.exe).

17 gold badges
80 silver badges
143 bronze badges
asked Jul 19, 2013 at 19:25
The “cd” command changes the directory, but not what drive you are working with. So when you go “cd d:\temp”, you are changing the D drive’s directory to temp, but staying in the C drive.
Execute these two commands:
D:
cd temp That will get you the results you want.
answered Jul 19, 2013 at 19:27

Mark Nenadov
5 gold badges
24 silver badges
32 bronze badges
Another alternative is pushd
, which will automatically switch drives as needed. It also allows you to return to the previous directory via popd
:
C:\Temp>pushd D:\some\folder
D:\some\folder>popd
C:\Temp>_ answered Jul 19, 2013 at 20:18

Ansgar Wiechers
25 gold badges
250 silver badges
324 bronze badges
cd
has a parameter /d
, which will change drive and path with one command:
cd /d d:\temp ( see cd /?
)
answered Jul 19, 2013 at 20:12
10 gold badges
58 silver badges
91 bronze badges
You can try this it works for me
C:\Users\user>cd..
C:\Users>cd ..
C:\>D:
D:\>cd \foldername answered Dec 18, 2021 at 19:09
G:\ D: <!--Move to D Drive-->
D:\ cd temp <!--Move to temp Folder--> answered Sep 27, 2022 at 6:18

Munna Kumar
4 silver badges
7 bronze badges
Just type your desired drive initial in the command line and press enter
Like if you want to go L:\\ drive,
Just type L: or l:
answered Nov 13, 2020 at 7:17

cd /driveName driveName:\pathNamw answered Jan 4, 2021 at 6:20
You can use these three commands:
1.cd. 2.d: 3.cd temp
answered Sep 18, 2021 at 11:03
Конфликт кодировок
Полностью локализованная консоль в идеале должна поддерживать все мыслимые и немыслимые кодировки приложений, включая свои собственные команды и команды Windows, меняя “на лету” кодовые страницы потоков ввода и вывода. Задача нетривиальная, а иногда и невозможная – кодовые страницы DOS (CP437, CP866) плохо совмещаются с кодовыми страницами Windows и Unicode.
История кодировок здесь: О кодировках и кодовых страницах / Хабр (habr.com)
Исторически кодовой страницей Windows является CP1251 (Windows-1251, ANSI, Windows-Cyr), уверенно вытесняемая 8-битной кодировкой Юникода CP65001 (UTF-8, Unicode Transformation Format), в которой выполняется большинство современных приложений, особенно кроссплатформенных. Между тем, в целях совместимости с устаревшими файловыми системами, именно в консоли Windows сохраняет базовые кодировки DOS – CP437 (DOSLatinUS, OEM) и русифицированную CP866 (AltDOS, OEM).
Совет 1.
Выполнять разработку текстовых файлов (программных кодов, текстовых данных и др.) исключительно в кодировке UTF-8. Мир любит Юникод, а кроссплатформенность без него вообще невозможна.Совет 2.
Периодически проверять кодировку, например в текстовом редакторе Notepad++. Visual Studio может сбивать кодировку, особенно при редактировании за пределами VS.
Поскольку в консоли постоянно происходит передача управления от приложений к собственно командному процессору и обратно, регулярно возникает “конфликт кодировок”, наглядно иллюстрируемый таблица 1 и 2, сформированных следующим образом:
Команды и код приложения под катом
код тестового приложения:
using System;
using ova.common.logging.LogConsole;
using Microsoft.Extensions.Logging;
using ova.common.logging.LogConsole.Colors;
namespace LoggingConsole.Test
{ partial class Program { static void Main2(string[] args) { ColorLevels.ColorsDictionaryCreate(); Console.WriteLine("Hello World! Привет, мир!"); //вывод строки приветствия на двух языках LogConsole.Write("Лог из стартового проекта", LogLevel.Information); Console.WriteLine($"8. Active codepage: input {Console.InputEncoding.CodePage}, output {Console.OutputEncoding.CodePage}"); Console.ReadKey(); } }
} Командную часть задания все консоли локализовали практически без сбоев во всех кодировках, за исключением: в WPS
неверно отображена русскоязычная часть команды во всех кодировках.

Вывод тестового приложения локализован лишь в 50% испытаний, как показано в табл.2.

По умолчанию Windows устанавливает для консоли кодовые страницы DOS. Чаще всего CP437, иногда CP866. Актуальные версии командной строки cmd.exe способны локализовать приложения на основе русифицированной кодовой страницы 866, но не 437, отсюда и изначальный конфликт кодировок консоли и приложения. Поэтому
Совет 4.
Перед запуском приложения необходимо проверить кодовую страницу консоли командой CHCP и ей же изменить кодировку на совместимую – 866, 1251, 65001.
Совет 5.
Можно установить кодовую страницу консоли по умолчанию
. Кратко: в разделе реестра \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor добавить или изменить значение параметра Autorun на: chcp <номер кодовой страницы>. Очень подробно здесь: Изменить кодовую страницу консоли Windows по умолчанию на UTF-8 (qastack.ru)
, оригинал на английском здесь: Change default code page of Windows console to UTF-8
.
Справочник по командам CMD Windows
Данная страница представляет собой самый полный документ в русскоязычном сегменте Интернет, содержащий список команд командной строки всех версий Windows. Наименования подавляющего большинства команд являются ссылками и ведут на страницы с подробным их описанием и примерами использования. В разных версиях ОС семейства Windows набор поддерживаемых команд, их параметры командной строки, синтаксис и отображение результатов выполнения могут различаться. Одна и та же утилита командной строки может присутствовать в стандартной поставке одной версии Windows, но отсутствовать в другой, или входить в состав дополнительных средств, как например, Resource Kit или Software Development Kit.
На данной странице представлено описание не только внутренних команд CMD, но и стандартных утилит командной строки, входящих в состав конкретных версии операционной системы (ОС) семейства Windows. Некоторые из приведенных команд устарели, и больше не поддерживаются разработчиком или не имеют смысла в современных операционных системах, что отмечается в описании команды.
Список команд постоянно обновляется и включает в себя все новейшие команды, добавляемые в стандартную поставку при выходе новых версий или обновлений ОС Windows 11.
APPEND
– позволяет программам открывать файлы данных из указанных
папок так, как будто они находятся в текущей папке.
ARP
– просмотр и изменение таблиц ARP (Address Resolution Protocol)
ASSOC
– просмотр или изменение сопоставлений расширений файлов приложениям
AT
– управление планировщиком задач
ATTRIB
– изменение атрибутов файлов
Auditpol
– управление политиками аудита.
BASH
– командная оболочка BASH в подсистеме Windows для Linux (WSL).
BCDBOOT
– копирование в системный раздел файлов загрузки и создание
нового хранилища конфигурации загрузки (BCD)
BCDEDIT
– редактирование хранилища данных конфигурации загрузки (BCD)
BOOTCFG
– редактирование параметров загрузки в файле boot.ini
BOOTIM
– вызов меню загрузки и восстановления (Выбор действия) Windows 10
BOOTREC
– восстановление загрузочных записей и конфигурации загрузки Windows
BOOTSECT
– редактирование загрузочных секторов для обеспечения загрузки NTLDR или BOOTMGR
BREAK
– включить или выключить обработку комбинации клавиш CTRL+C в DOS
CACLS
– редактирование списков управления доступом к файлам (ACL – Access Control List)
CALL
– вызов из командного файла подпрограмм или других командных файлов
CD
– смена каталога (Change Directory)
CHGLOGON
– изменение настроек сервера терминалов, аналогично CHANGE LOGON
CHGPORT
– изменение настроек сервера терминалов, аналогично CHANGE PORT
CHCP
– просмотр или изменение текущей кодовой страницы
CHKDSK
– проверка диска (Check Disk)
CheckNetIsolation
– управление доступом приложений к интерфейсу замыкания на себя (localhost) в Windows 10
CHKNTFS
– проверка признака ошибки файловой системы и управление проверкой диска при загрузке Windows
CHOICE
– реализация пользовательского ввода в командном файле
CIPHER
– отображение или изменение шифрования файлов на томах NTFS
CLEARMGR
– управление очисткой дисков Windows
CLIP
– перенаправление вывода утилит командной строки в буфер обмена Windows
CLS
– очистка экрана в командной строке
CMD
– запуск новой копии интерпретатора командной строки
CMDKEY
– создание, отображение, удаление и сохранение имен пользователей и паролей
COLOR
– изменение цвета текста и фона в окне CMD
COMMAND
– запуск новой копии интерпретатора командной строки MS-DOS
COMP
– сравнение содержимого файлов
COMPACT
– управление сжатием и распаковкой файлов в разделах NTFS
CONVERT
– преобразование файловой системы из FAT в NTFS
COPY
– копирование файлов и каталогов
Cscript
– сервер сценариев Windows с консольным интерфейсом
DATE
– отображение или изменение даты
DEBUG
– запуск отладчика DOS-Windows XP
DEFRAG
– дефрагментация диска
DEL
– удаление одного или нескольких файлов
DevCon
– управление устройствами в командной строке
DIANTZ
— тоже что и MAKECAB, создание архивов .cab.
DIR
– отображение списка файлов и каталогов
DISKCOMP
– сравнение содержимого двух гибких дисков
DISKCOPY
– копирование содержимого одного гибкого диска на другой
DISKPART
– управление разделами и дисками из командной строки
DISM
– управление компонентами образрв WIM.
DISPDIAG
– вывод дампов с диагностической информацией о графической подсистеме.
DJOIN
– автономное присоединение компьютера к домену.
DOSKEY
– редактирование и повторный вызов команд Windows, создание макросов DOSKey
DRIVERQUERY
– отобразить информацию об установленных драйверах.
DxDiag
– средство диагностики DirectX.
EDIT
– запуск текстового редактора
ENDLOCAL
– конец локальных изменений переменных окружения в командном файле
ERASE
– аналогично команде DEL – удаление файлов
ESENTUTL
– обслуживание баз данных Extensible Storage Engine для Windows
EVENTCREATE
– запись сообщения в журнал событий Windows
EXIT
– выход из процедуры или командного файла
EXPAND
– распаковка сжатых файлов CAB-файлов.
EXTRACT
– извлечение содержимого, распаковка CAB-файлов в Windows (EXTRAC32)
FC
– сравнение содержимого файлов
FIND
– поиск строки символов в файле
FINDSTR
– поиск строк в файлах с использованием регулярных выражений
FOR
– организация циклической обработки результатов выполнения других команд, списков, и строк в текстовых файлах
FORFILES
– выполнение указанной команды для каждого файла из заданной группы
FORMAT
– форматирование диска
FSUTIL
– управление файловой системой
FTP
– консольный FTP-клиент
FTYPE
– просмотр и изменение расширений файлов и сопоставленных им приложений
GETMAC
– отображение физического адреса сетевого адаптера (MAC-адреса)
GOTO
– команда безусловного перехода в командном файле
GPRESULT
– отображение результирующей политики (RSoP)
GPUPDATE
– обновление групповых политик.
HELP
– вызов справки командной строки Windows
HOSTNAME
– отображение имени компьютера
iCACLS
– управление списками доступа (ACL)
IF
– оператор условного выполнения команд в пакетном файле
IPCONFIG
просмотр и управление конфигурацией протокола IP
LABEL
– редактирование меток тома дисков
LicensingDiag
– диагностика лицензирования Windows 10 и старше
LOGMAN
– управление монитором оценки производительности системы
LOGOFF
– завершение сеанса пользователя
MAKECAB
– создание сжатых файлов формата CAB
MBR2GPT
– преобразование дисков MBR в GPT
MEM
– вывод справки об использовании памяти в MS-DOS
MD
– создание нового каталога
MKLINK
– создание символической ссылки на файл или каталог
MODE
– конфигурирование системных устройств в среде CMD
MORE
– постраничный вывод в консоли
MOUNTVOL
– управление точками монтирования томов
MOVE
– перемещение файлов и каталогов
MOVEFILE
– перемещение или удаление занятых файлов при следующей перезагрузке
MSG
– отправка сообщений пользователям.
MSTSC
– подключение к удаленному рабочему столу.
NBTSTAT
– просмотр статистических данных NETBIOS через TCP/IP (NetBT)
NET
– управление ресурсами локальной сети
NETCFG
– отображение и изменение конфигурации компонентов сети
NETSH
– командная сетевая оболочка (Network Shell)
NETSTAT
– отображение статистики сетевых соединений
NSLOOKUP
OPENFILES
– управление открытыми по сети или локально файлами
PATH
– отображение или изменение путей поиска исполняемых файлов
PATHPING
– трассировка маршрута с возможностью оценки качества участков трассы
PAUSE
– пауза при выполнении командного файла
PING
утилита проверки доступности узла
PKGMGR
– управление программными пакетами Windows
PNPUTIL
– конфигурирование драйверов устройств PnP
POPD
– возврат в каталог, ранее запомненный с помощью команды PUSHD
POWERCFG
– настройка параметров системы электропитания Windows
PowerShell_ISE
– запуск интегрированной среды разработки сценариев PowerShell
PRINT
– печать текстового файла
PROMPT
– изменение строки приглашения в консоли
PUSHD
– сохранить текущий путь каталога и перейти в указанный
PSR
– записать действия пользователя в Windows 7/8.1/10 ( P
roblem S
teps R
ecorder)
QPROCESS
– отобразить состояние процессов
QUERY
– опросить состояние процессов и сеансов пользователей
RASDIAL
– управление сеансами удаленного доступа
RASPHONE
– управление сеансами удаленного доступа
RD
– удаление каталога
REAGENTC
– адимнистрирование стреды восстановления Windows
RECOVER
– восстановление файлов на поврежденном диске
REG
– утилита командной строки для работы с реестром Windows
REGEDIT
– импорт и экспорт данных реестра Windows
REGSVR32
– регистрация или отмена регистрации DLL
REGINI
– управление доступом к разделам реестра
RENAME (REN)
– переименование файлов
REPLACE
– замена или добавление файлов в катологах
RESET
– сброс сеанса удаленного рабочего стола (RDP сессии)
RMDIR
– удаление каталога
ROBOCOPY
– утилита резервного копирования и синхронизации каталогов (Robust File and Folder Copy)
ROUTE
– управление таблицей маршрутизации
RUNAS
– запуск приложения от имени другого пользователя
RUNDLL32
– запуск DLL в качестве приложения
SC
– управление службами Windows (Service Control)
SCHTASKS
– управление планировщиком задач
SCLIST
– отображение списка системных служб
ScriptRunner
– запуск одного или нескольких скриптов в Windows 10
SET
– отображение и изменение переменных среды окружения Windows
SETLOCAL
– установка локальных переменных в командном файле
SETX
– утилита для создания системных переменных
SFC
– проверка и восстановление системных файлов Windows
SHIFT
сдвиг входных параметров для командного файла
SHUTDOWN
– выключение или перезагрузка компьютера
SLEEP
– задержка по времени в пакетном файле
SLMGR
– управление лицензированием программного обеспечения Windows
SORT
– сортировка строк в текстовом файле
START
– запуск приложения или командного файла
STORDIAG
– диагностика системы хранения данных в Windows 10
SUBST
– назначение (отмена назначения) каталогу буквы диска
SxSTrace
– диагностическое средство трассировки компонент системы
SYSTEMINFO
– отображение информации о системе
TAKEOWN
– изменение владельца файла или каталога
TAR
– архивирование данных архиватором tar в Windows 10
TASKKILL
– завершение процессов на локальной или удаленной системе
TASKLIST
– отображение списка выполняющихся приложений и служб Windows
TIME
– отображение и установка системного времени
TELNET
– telnet-клиент Windows
TFTP
– TFTP-клиент Windows
TIMEOUT
– задержка в пакетных файлах
TITLE
– изменение заголовка окна CMD. EXE
TRACERT
– трассировка маршрута к удаленному узлу
TREE
– отображение структуры каталога в графическом виде
TSCON
– подключение к сессии удаленного рабочего стола (RDP).
TSDISCON
– отключение сессии удаленного рабочего стола (RDP).
TSKILL
– завершение процессов, адаптированное для среды сервера терминалов (RDP).
TYPE
– вывод на экран содержимого текстового файла
TypePerf
– вывод сведений о производительности на экран или в журнал
TZUTIL
– управление часовыми поясами в среде Windows
VaultCmd
– администрирование учетных данных Windows.
VER
– отображение версии операционной системы
VERIFIER
– тестирование драйверов Windows.
VERIFY
– управление режимом проверки записываемых файлов
VOL
– вывод данных метки тома
W32TM
– управление службой времени Windows
WAITFOR
– организация обмена сигналами между компьютерами
WEVTUTIL
– управление событиями в Windows
WHERE
– определение места расположения файлов
WHOAMI
– вывод имени текущего пользователя
WINDIFF
– сравнение содержимого файлов
Winget
– установка, обновление, перенос и удаление приложений в Windows 10 и более поздних версий.
WinMgmt
– обслуживание инструментария управления Windows (WMI)
WINRM
– удаленное управление Windows из командной строки
WINRS
– удаленная командная строка (Remote Shell)
WINSAT
– средство проверки производительности Windows
WMIC
– выполнение команды WMI в командной строке
WSCollect
– получить CAB-файл с копиями журналов Windows 10 на рабочем столе
Wscript
– сервер сценариев Windows с графическим интерфейсом
WSL
– выполнение команд Linux и конфигурирование параметров подсистемы Windows для Linux (WSL) в Windows 10
WSLconfig
– конфигурирование параметров подсистемы Windows для Linux (WSL) в Windows 10
WUSA
– автономная установка обновлений Windows
XCOPY
– копирование файлов и папок
Прочие материалы по работе с командной строкой Windows:
Настройка командной строки
Windows.
Работа с командной строкой Windows
Командные файлы Windows
Запуск приложений от имени администратора без запроса UAC
Работа с сетью в командной строке.
Подсистема Linux в Windows 10
В начало страницы
|
На главную страницу сайта
Спасшая статья
Приложение cmd.exe
– это командная строка или программная оболочка с текстовым интерфейсом (во загнул ![]()
).

Если Вы занялись проблемой кодировки шрифтов в
cmd.exe
, то как запускать командную строку наверняка уже знаете
![]()
Перейдем собственно к проблеме: иногда вместо русских букв при выполнении команд выходит набор непонятных символов ( рис.2
).


Теперь Вы получили нормальный текст на русском языке. Так же можно поменять текущую кодировку шрифта, для этого используется команда chcp
. Набираем эту команду и жмем Enter
, в результате получим текущую кодировку для командной строки – рис.4
.

Для изменения кодировки так же применим chcp в следующем формате:
Где
– это цифровой параметр нужного шрифта, например,
1251
– Windows (кириллица);
Выбирайте на любой вкус. Т.о. что бы изменить кодировку на UTF-
8 нужно выполнить команду chcp 65001
.
Проблемы консолей Visual Studio
В Visual Studio имеется возможность подключения консолей, по умолчанию подключены командная строка для разработчика и Windows PowerShell для разработчика. К достоинствам можно отнести возможности определения собственных параметров консоли, отдельных от общесистемных, а также запуск консоли непосредственно в директории разработки. В остальном – это обычные стандартные консоли Windows, включая, как показано ранее, установленную кодовую страницу по умолчанию.
Отдельной опцией Visual Studio является встроенная односеансная консоль отладки, которая перехватывает команду Visual Studio на запуск приложения, запускается сама, ожидает компиляцию приложения, запускает его и отдает ему управление. Таким образом, отладочная консоль в течение всего рабочего сеанса находится под управлением приложения и возможность использования команд Windows или самой консоли, включая команду CHCP, не предусмотрена. Более того, отладочная консоль не воспринимает кодовую страницу по умолчанию, определенную в реестре, и всегда запускается в кодировке 437 или 866.
Совет 6.
Тестирование приложения целесообразно выполнять во внешних консолях, более дружелюбных к локализации.
Анализ проблем консолей был бы не полон без ответа на вопрос – можно ли запустить консольное приложение без консоли? Можно – любой файл “.exe” запустится двойным кликом, и даже откроется окно приложения. Однако консольное приложение, по крайней мере однопоточное, по двойному клику запустится, но консольный режим не поддержит
– все консольные вводы-выводы будут проигнорированы, и приложение завершится
Способы запуска командной строки
Ссылки на материалы по настройке командной строки и приемах работы с ней размещены в конце страницы.
Стратегия локализации приложения в консоли
Удалить приложение PowerShell (если установлено), сохранив Windows PowerShell;
Установить в качестве кодовую страницу консоли по умолчанию CP65001 (utf-8 Unicode) или CP1251 (Windows-1251-Cyr), см. совет 5
;Разработку приложений выполнять в кодировке utf-8 Unicode;
Контролировать кодировку файлов исходных кодов, текстовых файлов данных, например с помощью Notepad++;
Реализовать программное управление локализацией приложения в консоли, пример ниже под катом:
Пример программной установки кодовой страницы и локализации приложения в консоли
using System;
using System.Runtime.InteropServices;
namespace LoggingConsole.Test
{ partial class Program { static void Main(string[] args) { [DllImport("kernel32.dll")] static extern bool SetConsoleCP(uint pagenum); [DllImport("kernel32.dll")] static extern bool SetConsoleOutputCP(uint pagenum); SetConsoleCP(65001); //установка кодовой страницы utf-8 (Unicode) для вводного потока SetConsoleOutputCP(65001); //установка кодовой страницы utf-8 (Unicode) для выводного потока Console.WriteLine($"Hello, World!"); } }
} Виды консолей
В общем случае функции консоли таковы:
управление операционной системой и системным окружением приложений на основе применения стандартных системных устройств ввода-вывода (экран и клавиатура), использования команд операционной системы и/или собственно консоли;
запуск приложений и обеспечение их доступа к стандартным потокам ввода-вывода системы, также с помощью стандартных системных устройств ввода-вывода.
Основная консоль Windows – командная строка или иначе командный процессор ( CMD
). Большие возможности предоставляют оболочки PowerShell ( PS
), Windows PowerShell ( WPS
) и Terminal. По умолчанию Windows устанавливает Windows Power Shell мажорной версией до 5, однако предлагает перейти на новую версию – 7-ку, имеющую принципиальное отличие (вероятно, начинающееся с 6-ки) – кроссплатформенность. Terminal – также отдельно уставливаемое приложение, по сути интегратор всех ранее установленных оболочек PowerShell и командной строки.
Отдельным видом консоли можно считать консоль отладки Visual Studio ( CMD-D
).
Локализация отладочной консоли Visual Studio
Отладочная консоль – наиболее востребованная консоль разработчика, гораздо более удобная, чем внешняя консоль, поэтому резонно приложить максимум усилий для ее локализации.
На самом деле, правильнее говорить о локализации приложения в консоли – это важное уточнение. Microsoft по этому поводу высказывается недвусмысленно: “Programs that you start after you assign a new code page use the new code page. However, programs (except Cmd.exe) that you started before assigning the new code page will continue to use the original code page”. Иными словами, консоль можно локализовать когда угодно и как угодно, но приложение будет локализовано в момент стабилизации взаимодействия с консолью в соответствии с текущей локализацией консоли, и эта локализация сохранится до завершения работы приложения. В связи с этим возникает вопрос – в какой момент окончательно устанавливается связь консоли и приложения?
Важно!
Приложение окончательно стабилизирует взаимодействие с консолью в момент начала ввода-вывода в консоль, благодаря чему и появляется возможность программного управления локализацией приложения в консоли
– до первого оператора ввода-вывода.
Ниже приведен пример вывода тестового приложения в консоль, иллюстрирующий изложенное. Метод Write получает номера текущих страниц, устанавливает новые кодовые страницы вводного и выводного потоков, выполняет чтение с консоли и записывает выводную строку, содержащий русский текст, в том числе считанный с консоли, обратно в консоль. Операция повторяется несколько раз для всех основных кодовых страниц, упомянутых ранее.
F:\LoggingConsole.Test\bin\Release\net5.0>chcp
Active code page: 1251
F:\LoggingConsole.Test\bin\Release\net5.0>loggingconsole.test
Codepages: current 1251:1251, setted 437:437, ΓΓεΣΦ∞ 5 ±Φ∞ΓεδεΓ ∩ε-≡≤±±ΩΦ: Θ÷≤Ωσ=Θ÷≤Ωσ
Codepages: current 437:437, setted 65001:65001, 5 -: =
Codepages: current 65001:65001, setted 1252:1252, ââîäèì 5 ñèìâîëîâ ïî-ðóññêè: éöóêå=éöóêå
Codepages: current 1252:1252, setted 1251:1251, вводим 5 символов по-русски: йцуке=йцуке
Codepages: current 1251:1251, setted 866:866, ттюфшь 5 ёшьтюыют яю-Ёєёёъш: щЎєъх=щЎєъх
Codepages: current 866:866, setted 1251:1251, вводим 5 символов по-русски: йцуке=йцуке
Codepages: current 1251:1251, setted 1252:1252, ââîäèì 5 ñèìâîëîâ ïî-ðóññêè: éöóêå=éöóêå
F:\LoggingConsole.Test\bin\Release\net5.0>chcp
Active code page: 1252 приложение запущено в консоли с кодовыми страницами 1251 (строка 2);
приложение меняет кодовые страницы консоли (current, setted);
приложение остановлено в консоли с кодовыми страницами 1252 (строка 11, setted);
по окончании работы приложения изменения консоли сохраняются (строка 14 – Active codepage 1252);
Приложение адекватно локализовано только в случае совпадения текущих кодовых страниц консоли (setted 1251:1251) с начальными кодовыми страницами (строки 8 и 10).
Код тестового приложения под катом
using System;
using System.Runtime.InteropServices;
namespace LoggingConsole.Test
{ partial class Program { [DllImport("kernel32.dll")] static extern uint GetConsoleCP(); [DllImport("kernel32.dll")] static extern bool SetConsoleCP(uint pagenum); [DllImport("kernel32.dll")] static extern uint GetConsoleOutputCP(); [DllImport("kernel32.dll")] static extern bool SetConsoleOutputCP(uint pagenum); static void Main(string[] args) { Write(437); Write(65001); Write(1252); Write(1251); Write(866); Write(1251); Write(1252); } static internal void Write(uint WantedIn, uint WantedOut) { uint CurrentIn = GetConsoleCP(); uint CurrentOut = GetConsoleOutputCP(); Console.Write($"current {CurrentIn}:{CurrentOut} - текущая кодировка, "); /*wanted {WantedIn}:{WantedOut},*/ SetConsoleCP(WantedIn); SetConsoleOutputCP(WantedOut); Console.Write($"setted {GetConsoleCP()}:{GetConsoleOutputCP()} - новая кодировка, "); Console.Write($"вводим 3 символа по-русски: "); string str = "" + Console.ReadKey().KeyChar.ToString(); str += Console.ReadKey().KeyChar.ToString(); str += Console.ReadKey().KeyChar.ToString(); Console.WriteLine($"={str}"); } static internal void Write(uint ChangeTo) { Write(ChangeTo, ChangeTo); } }
} Совет 7.
Обязательный и повторный! Функции SetConsoleCP должны размещаться в коде до первого оператора ввода-вывода
в консоль.



