Want to change non-English Command Line interface to English or change the Command Prompt language to English in Windows 11 or 10? It is very easy. You do not need to change the Windows system language or display language in Windows Settings.
Table of Contents
- Method 1. Change Language of Command Prompt using CHCP syntax in Windows 11?
- Supported code page and its country/region or language
- Method 2. Change Command Line Language permanently through Windows Registry in Windows 11
- Method 3. Set a language for Command Prompt & all non-Unicode apps
Method 1. Change Language of Command Prompt using CHCP syntax in Windows 11?
We will use the CHCP syntax to change non-english to English in MS-Dos Command Prompt on a Windows 11 PC below. You can also the language from English to many other languages in Windows Command Prompt.
- Firstly press the Windows logo key and R on the keyboard, you will then open the Run prompt on your computer screen. Type cmd, then press OK, you will open the Command Line on your Windows 11 PC.
- Input and execute follow command in the CMD prompt:
chcp 437 - You will get the response in command prompt as below:
Active code page: 437
About Chcp Syntax
The chcp command is used to supplement the international keyboard and character set information. CHCP DOS command allows MS-DOS to be used in other countries and with different languages. Chcp displays the number of the active console code page, or you can use it to change the console’s active console code page.
- To display the number of the active console code page, you can type in Chcp without parameters in Windows command prompt line, then execute.
- To change active code page, you can input and execute chcp [nnn], nnn specifies a code page number. See more details of the supported code page and its country/region or language below.
Supported code page and its country/region or language
Code page | Country/region or language |
---|---|
437 | United States |
708 | Arabic |
737 | Greek |
850 | Multilingual (Latin I) default code page in most of Europe |
852 | Slavic (Latin II) |
855 | Cyrillic (Russian) |
857 | Turkish |
860 | Portuguese |
861 | Icelandic |
862 | Hebrew |
863 | Canadian-French |
865 | Nordic |
866 | Russian |
869 | Modern Greek |
874 | Thai |
875 | Greek Modern |
932 | Japanese |
936 | Simplified Chinese (PRC, Singapore) |
949 | Korean |
950 | Traditional Chinese (Taiwan; Hong Kong SAR, PRC) |
1141 | Germany |
1142 | Denmark-Norway |
1143 | Finland-Sweden |
1144 | Italy |
1145 | Latin America-Spain |
1146 | United Kingdom |
1147 | France |
65001 | Unicode UTF-8 |
1200 | Unicode UTF-16, little endian byte order |
1201 | Unicode UTF-16, big endian byte order |
Note:
- The chcp syntax works with various Windows OS version, such as Windows 7, Windows 8, Windows 10, Windows 11. However the nlsfunc and the country.sys must be loaded into the config.sys before you can use this syntax to change language of Command prompt.
- When using chcp to change the Code Page to 437 English or other language in Command Prompt, it works with the current Command Line window only. If you start a new CMD window, it goes back to the original, default language of your Windows system. If you like to permanently change the language in Command Line, follow below instructions to edit the Windows Registry.
Method 2. Change Command Line Language permanently through Windows Registry in Windows 11
On your Windows 11 or Windows 10 PC, do a search for “regedit” in the Windows search bar and select to open the Registry Editor app.
Go to HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor, right click on the blank area, then choose New > String Value, create a new string, name it to Autorun, double click on the string to edit it and add the value “chcp 437” (without the quotes), save the change and exit the Registry Editor app.
Go to run the command line in Windows 11 or 10, now you will see the 437 code page is automatically activated.
Method 3. Set a language for Command Prompt & all non-Unicode apps
In Windows 11, select Start > Settings > Time & language > Language & region > Administrative language settings.
In the Region dialog, on the Administrative tab, click Change system locale.
In the resulting dialog, select the desired Unicode language from the Current system locale list.
Note that you have to install the language pack on your PC first.
Also, you in the Region Settings dialog, you can check the Beta: Use Unicode UTF-8 for worldwide language support box. This option will activate code page 65001, see the chart Supported code page and its country/region or language above.
Click OK. You will be prompted to restart the computer to apply the changes.
This change applies to all non-Unicode applications installed on your PC, not only the Windows Command Prompt.
Время на прочтение
9 мин
Количество просмотров 29K
Введение
Консольные приложения до сих пор остаются наиболее востребованным видом приложений, большинство разработчиков оттачивают архитектуру и бизнес-логику именно в консоли. При этом они нередко сталкиваются с проблемой локализации — русский текст, который вполне адекватно отражается в исходном файле, при выводе на консоль приобретает вид т.н. «кракозябр».
В целом, локализация консоли Windows при наличии соответствующего языкового пакета не представляется сложной. Тем не менее, полное и однозначное решение этой проблемы, в сущности, до сих пор не найдено. Причина этого, главным образом, кроется в самой природе консоли, которая, являясь компонентом системы, реализованным статическим классом System.Console, предоставляет свои методы приложению через системные программы-оболочки, такие как командная строка или командный процессор (cmd.exe), PowerShell, Terminal и другие.
По сути, консоль находится под двойным управлением — приложения и оболочки, что является потенциально конфликтной ситуацией, в первую очередь в части использования кодировок.
Данный материал не предлагает строгий алгоритм действий, а направлен на описание узловых проблем, с которыми неизбежно сталкивается разработчик локализованного консольного приложения, а также некоторые возможные пути их разрешения. Предполагается, что это позволит разработчику сформировать стратегию работы с локализованной консолью и эффективно реализовать существующие технические возможности, большая часть которых хорошо описана и здесь опущена.
Виды консолей
В общем случае функции консоли таковы:
-
управление операционной системой и системным окружением приложений на основе применения стандартных системных устройств ввода-вывода (экран и клавиатура), использования команд операционной системы и/или собственно консоли;
-
запуск приложений и обеспечение их доступа к стандартным потокам ввода-вывода системы, также с помощью стандартных системных устройств ввода-вывода.
Основная консоль Windows — командная строка или иначе командный процессор (CMD). Большие возможности предоставляют оболочки PowerShell (PS), Windows PowerShell (WPS) и Terminal. По умолчанию Windows устанавливает Windows Power Shell мажорной версией до 5, однако предлагает перейти на новую версию — 7-ку, имеющую принципиальное отличие (вероятно, начинающееся с 6-ки) — кроссплатформенность. Terminal — также отдельно уставливаемое приложение, по сути интегратор всех ранее установленных оболочек PowerShell и командной строки.
Отдельным видом консоли можно считать консоль отладки Visual Studio (CMD-D).
Конфликт кодировок
Полностью локализованная консоль в идеале должна поддерживать все мыслимые и немыслимые кодировки приложений, включая свои собственные команды и команды 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, сформированных следующим образом:
Были запущены три консоли — CMD, PS и WPS. В каждой консоли менялась кодовая страница с помощью команды CHCP, выполнялась команда Echo c двуязычной строкой в качестве параметра (табл. 1), а затем в консоли запускалось тестовое приложение, исходные файлы которого были созданы в кодировке UTF-8 (CP65001): первая строка формируется и направляется в поток главным модулем, вторая вызывается им же, формируется в подключаемой библиотеке классов и направляется в поток опять главным модулем, третья строка полностью формируется и направляется в поток подключаемой библиотекой.
Команды и код приложения под катом
команды консоли:
-
> Echo ffffff фффффф // в командной строке
-
PS> Echo ffffff фффффф // в PowerShell
-
PS> Echo ffffff ?????? // так выглядит та же команда в Windows PowerShell
код тестового приложения:
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.
Сoвет 3. Про PowerShell забываем раз и навсегда. Ну может не навсегда, а до следующей мажорной версии…
По умолчанию 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.
Проблемы консолей Visual Studio
В Visual Studio имеется возможность подключения консолей, по умолчанию подключены командная строка для разработчика и Windows PowerShell для разработчика. К достоинствам можно отнести возможности определения собственных параметров консоли, отдельных от общесистемных, а также запуск консоли непосредственно в директории разработки. В остальном — это обычные стандартные консоли Windows, включая, как показано ранее, установленную кодовую страницу по умолчанию.
Отдельной опцией Visual Studio является встроенная односеансная консоль отладки, которая перехватывает команду Visual Studio на запуск приложения, запускается сама, ожидает компиляцию приложения, запускает его и отдает ему управление. Таким образом, отладочная консоль в течение всего рабочего сеанса находится под управлением приложения и возможность использования команд Windows или самой консоли, включая команду CHCP, не предусмотрена. Более того, отладочная консоль не воспринимает кодовую страницу по умолчанию, определенную в реестре, и всегда запускается в кодировке 437 или 866.
Совет 6. Тестирование приложения целесообразно выполнять во внешних консолях, более дружелюбных к локализации.
Анализ проблем консолей был бы не полон без ответа на вопрос — можно ли запустить консольное приложение без консоли? Можно — любой файл «.exe» запустится двойным кликом, и даже откроется окно приложения. Однако консольное приложение, по крайней мере однопоточное, по двойному клику запустится, но консольный режим не поддержит — все консольные вводы-выводы будут проигнорированы, и приложение завершится
Локализация отладочной консоли 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);
}
}
}
Программное управление кодировками консоли — это единственный способ гарантированной адекватной локализацией приложения в консоли. Языки .Net такой возможности не предоставляют, однако предоставляют функции WinAPI: SetConsoleCP(uint numcp) и SetConsoleOutputCP(uint numcp), где numcp — номер кодовой страницы потоков ввода и вывода соответственно. Подробнее здесь: Console Functions — Windows Console | Microsoft Docs. Пример применения консольных функций WInAPI можно посмотреть в тестовом приложении под катом выше.
Совет 7. Обязательный и повторный! Функции SetConsoleCP должны размещаться в коде до первого оператора ввода-вывода в консоль.
Стратегия локализации приложения в консоли
-
Удалить приложение 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 играет важную роль в удобстве использования и понимании сообщений, выводимых на экран при работе с командной строкой. По умолчанию, язык консоли настроен на английский язык, но возможность изменить его на родной или другой нужный язык не составляет сложностей.
В этой статье мы рассмотрим подробную инструкцию о том, как изменить язык консоли в операционной системе Windows. Следуя простым шагам, вы сможете настроить язык консоли и работать с командной строкой на нужном вам языке.
Операционная система Windows предоставляет несколько способов изменить язык консоли. Вы можете изменить язык только для текущей сессии или настроить постоянное изменение языка для будущих запусков командной строки. Возможности настройки языка консоли позволяют адаптировать операционную систему к вашим личным предпочтениям и региональным особенностям.
Содержание
- Шаг 1. Откройте настройки языка в Windows
- Шаг 2. Выберите нужный язык
- Шаг 3. Установите выбранный язык по умолчанию
- Шаг 4. Перезагрузите компьютер и проверьте изменения
Шаг 1. Откройте настройки языка в Windows
Чтобы изменить язык консоли в Windows, вам потребуется открыть настройки языка. Эти настройки позволят вам выбрать язык среды выполнения, который будет использоваться в командной строке.
Для открытия настроек языка выполните следующие действия:
1. | Нажмите на кнопку «Пуск» в левом нижнем углу экрана. |
2. | Откройте «Настройки», щелкнув на значке шестеренки. |
3. | В открывшемся меню выберите «Время и язык». |
4. | Настройки языка откроются во вкладке «Регион и язык». |
Теперь у вас есть доступ к настройкам языка, и вы можете перейти к следующему шагу для изменения языка консоли в Windows.
Шаг 2. Выберите нужный язык
После того, как вы открыли командную строку, вам нужно выбрать язык, на котором будет отображаться консоль. В Windows есть несколько предустановленных языков, среди которых английский, русский, испанский и другие.
Чтобы изменить язык консоли, выполните следующие действия:
- Кликните правой кнопкой мыши на заголовке консольного окна.
- В открывшемся контекстном меню выберите пункт «Свойства».
- В появившемся окне «Свойства консоли» перейдите на вкладку «Основные».
- Под пунктом «Язык отображения программ для нерегиональных форматов» выберите нужный язык из списка.
- Нажмите «ОК» для сохранения изменений.
После выполнения этих действий язык консоли изменится на выбранный, и все сообщения и текст в консоли будут отображаться на выбранном языке.
Шаг 3. Установите выбранный язык по умолчанию
После того как вы выбрали желаемый язык для консоли, необходимо установить его по умолчанию, чтобы предотвратить изменение языка при каждом запуске.
1. Нажмите на выбранный язык, чтобы выделить его.
2. Нажмите на кнопку «Установить по умолчанию», расположенную под списком языков, чтобы установить выбранный язык как язык консоли по умолчанию.
3. После этого выбранный язык будет использоваться каждый раз при запуске командной строки.
Обратите внимание, что установленный язык по умолчанию влияет только на командную строку Windows и не оказывает влияния на другие приложения.
Теперь вы успешно установили выбранный язык как язык консоли по умолчанию.
Шаг 4. Перезагрузите компьютер и проверьте изменения
После внесения необходимых изменений в язык консоли вам необходимо перезагрузить компьютер, чтобы изменения вступили в силу. Во время перезагрузки операционная система загрузит новые настройки языка и применит их ко всем системным процессам и приложениям.
После перезагрузки вы можете проверить изменения, открыв командную строку или PowerShell. Новый язык, который вы выбрали в настройках, должен отображаться в консоли.
Если новый язык по-прежнему не отображается, убедитесь, что вы правильно выполнили все предыдущие шаги. Возможно, вы пропустили какую-то настройку или сделали ошибку при выборе языка или перезагрузке компьютера.
When I open CMD in Windows 10, I get the wrong keyboard layout.
Same with WSL (bash)
When powershell is used, it displays the correct one.
This is a screenshot when pressing the ;
key in a standard US keyboard layout.
I have no idea how to change it, there’s nothing in settings for the console.
Edit:
This is the result of command:
Get-WinUserLanguageList | Format-Table -Property LanguageTag, InputMethodTips
Get-WinUserLanguageList | Format-Table -Property LanguageTag, InputMethodTips
LanguageTag InputMethodTips
----------- ---------------
en-US {0409:00000409}
es-MX {080A:0000080A}
This is the result of command chcp
in both cmd and powershell:
Active code page: 850
I tried chcp 437
as suggested by @IoCalisto but didn’t work
SOLVED
Problem vanished when autohotkey was turned off.
For some reason, autohotkey doesn’t work properly with CMD or WSL for some mappings.
Как сменить язык в командной строке: подробный гайд
Командная строка – мощный инструмент, позволяющий работать с операционной системой без использования графического интерфейса. Она позволяет выполнять различные действия, запускать программы и работать с файловой системой. Одним из основных параметров, которые можно настроить в командной строке, является язык вывода. В этой статье мы расскажем, как изменить язык в командной строке на примере операционных систем Windows и Linux.
Windows
-
Откройте командную строку. Для этого нажмите клавишу Win + R, введите команду cmd и нажмите Enter.
-
Введите команду chcp и нажмите Enter. Вы увидите текущую кодировку командной строки.
-
Чтобы изменить язык, используйте команду chcp с номером кодовой страницы вашего языка. Например, для русского языка используйте команду chcp 1251.
-
Чтобы убедиться в том, что изменения вступили в силу, введите команду chcp и нажмите Enter.
Linux
-
Откройте терминал. Для этого используйте сочетание клавиш Ctrl + Alt + T или найдите его в меню приложений.
-
Введите команду locale и нажмите Enter. Вы увидите текущую локализацию системы.
-
Для изменения языка используйте команду update-locale с указанием новой локализации. Например, для русского языка используйте команду sudo update-locale LANG=ru_RU.UTF-8.
-
Чтобы убедиться в том, что изменения вступили в силу, введите команду locale и нажмите Enter.
Заключение
Настройка языка в командной строке – важный шаг, который позволяет делать работу более комфортной и эффективной. Мы рассмотрели примеры изменения языка на операционных системах Windows и Linux. Надеемся, что эта информация окажется полезной для вас.