
Иногда по неизвестным причинам некоторые команды русскоязычной версии Windows выводят русский текст в нечитаемой кодировке, кракозябрами.
Например, команда help выводит нормальный текст:

Но при этом подсказка telnet выводит в ответ кракозябры.

Так может происходить, к примеру, если текущая кодировка консоли 866, а утилита telnet.exe почему-то выводит текст в кодировке 1251. Вывести текст в нужной кодировке поможет команда chcp
, которая устанавливает нужную кодировку.
Вот так можно посмотреть текущую кодировку консоли:
c:\Documents and Settings\user>chcp Текущая кодовая страница: 866 c:\Documents and Settings\user>
А вот так можно поменять кодировку на 1251, после чего вывод подсказки telnet будет отображаться нормально:
c:\Documents and Settings\user>chcp 1251 Текущая кодовая страница: 1251 c:\Documents and Settings\user>

К сожалению, заранее угадать, в какой кодировке выводится текст, невозможно, поэтому проще попробовать установить командой chcp разные кодировки, чтобы добиться правильного отображения русского текста. Обычно используются кодировки 866
(кодировка русского текста DOS), 1251
(кодировка русского текста Windows), 65001
(UTF-8).
Иногда кракозябры можно убрать, если выбрать в свойствах окна cmd.exe шрифт Lucida Console (по умолчанию там стоит “Точечные шрифты”).
1
. Универсальный декодер – конвертер кириллицы
.
We have a project in Team Foundation Server
(TFS) that has a non-English character (š) in it. When trying to script a few build-related things, we’ve stumbled upon a problem; we can’t pass the š
letter to the command-line tools. The command prompt or what not else messes it up, and the tf.exe
utility can’t find the specified project.
I’ve tried different formats for the .bat file (ANSI, UTF-8
with and without BOM
) as well as scripting it in JavaScript (which is Unicode inherently), but no luck. How do I execute a program and pass it a Unicode
command line?

asked Dec 23, 2008 at 9:30

chcp 65001 which will change the code page to UTF-8. Also, you need to use Lucida console fonts.
answered Dec 23, 2008 at 9:39
27 gold badges
158 silver badges
194 bronze badges
-
CMD
and “console” are unrelated factors.CMD.exe
is a just one of programs which are ready to “work inside” a console (“console applications”). - AFAIK,
CMD
has perfect support for Unicode; you can enter/output all Unicode chars when any
code page
is active. - Windows’ console has a lot
of support for Unicode — but it is not perfect (just “good enough”; see below). -
chcp 65001
is very dangerous. Unless a program was specially designed to work around defects in the Windows’ API (or uses a C runtime library which has these workarounds), it would not work reliably. Windows 8 fixes ½ of these problems withcp65001
, but the rest is still applicable to Windows 10
. - I work in Windows-1252
. As I already said: To input/output Unicode in a console, one does not need to set the code page
.
I need to convert a text file to UTF-8 format via Windows command prompt. This needs to be done on another machine and I do not have rights to install software on that machine. I need something like:
c:\notepad source-file target-file --encoding option Is there a Windows command prompt utility which can do it?
asked Jan 5, 2017 at 13:58
I need to convert a text file to utf-8 format via windows command prompt
You can easily do this with PowerShell:
Get-Content .\test.txt | Set-Content -Encoding utf8 test-utf8.txt Further Reading
answered Jan 5, 2017 at 14:38

77 gold badges
350 silver badges
392 bronze badges
Use iconv
from GNUWin32 pack. It is much faster, especially if your files are about or more than 1 Gb.
"C:\Program Files (x86)\GnuWin32\bin\iconv.exe" -f cp1251 -t utf-8 source.txt > result.txt
answered Feb 21, 2018 at 15:09
Raul N-k
1 silver badge
1 bronze badge
Here is for each convert *.text file to *.sql file:
foreach ($file in get-ChildItem *.txt) { Echo $file.name Get-Content $file | Set-Content -Encoding utf8 ("$file.name" +".sql") } answered May 20, 2019 at 10:20
powershell -command "Get-Content .\test.txt" > test-utf8.txt It turns out that piping the output to a file from the command prompt saves as utf-8.
answered Sep 30, 2020 at 20:49
POWERSHELL: # Assumes Windows PowerShell, use -Encoding utf8BOM with PowerShell Core. For multiple files:
$files = Get-ChildItem c:\Folder1\ -Filter *.txt
foreach ($file in $files) { Get-Content $file.FullName | Set-Content "E:\Temp\Destination\$($file.Name)" -Encoding utf8BOM
} OR, SECOND SOLUTION (for multiple files):
get-item C:\Folder1*.* | foreach-object {get-content -Encoding utf8BOM $_ | out-file ("C:\Folder1" + $_.Name) -encoding default} OR, THE THIRD SOLUTION: (only for 2 files)
$a = "C:/Folder1/TEST_ro.txt" $b = "C:/Folder1/TEST_ro-2.txt" (Get-Content -path $a) | Set-Content -Encoding UTF8BOM -Path $b answered Aug 1, 2022 at 14:19

Just Me
1 gold badge
16 silver badges
37 bronze badges
For those who want to batch convert several files (e.g.: all *.txt
files in folder and sub-folders):
dir *.txt -Recurse | foreach { # May remove the line below if you are confident Copy-Item $_ $_.bkp # Note that since we are reading and saving to the same file, # we need to enclose the command in parenthesis so it fully executes # (reading all content and closing the file) before proceeding (Get-Content $_) | Set-Content -Encoding utf8 $_
} answered Apr 12 at 13:46

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

Как видим проблема с кодировкой в cmd на лицо. И произошло это по следующей причине.
Стандартный блокнот Windows сохранил Bat файл в кодировке «1251» а консоль вывела его в кодировки «866». Вот от сюда все проблемы!
Решения проблемы с кодировкой в CMD. 1 Способ.
Скачиваем и устанавливаем на свой компьютер « Notepad
++
».
После запуска « Notepad
++
» запишете в документ те же строки, которые мы уже ранние записывали в стандартный блокнот.
Теперь осталось сохранить документ с именем «2.bat» в правильной кодировке. Для этого идём в меню « Кодировки
> Кодировки
> Кириллица
> OEM-866
»

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

Как видим, текст на Русском в CMD отобразился, как положено.
Решения проблемы с кодировкой в CMD. 2 Способ.
Теперь рассмотрим ещё одну ситуацию, когда могут возникнуть проблемы с кодировкой в CMD.
Допустим, ситуация требует сохранить результат выполнения той или иной команды в обычный «TXT» файл. В приделах этого поста возьмём для примера команду «HELP».
: Сохранить справку CMD в файл «HelpCMD.txt. Для этого создайте Bat файл и запишите в него следующие строки.
После выполнения Bat файла в корне диска «C:\» появится файл «HelpCMD.txt» и вместо справки получится вот что:

Естественно, такой вариант не кому не понравится и что бы сохранить справку в понятном для человека виде, допишите в Bat файл строку.
Теперь содержимое кода будет такое.
После выполнения «Батника» результат будет такой:

Вот так на много лучше, правда?
Пожалуй, на этом я закончу пост. Добавить больше нечего. Если у Вас имеются какие-то соображения по данной теме, буду рад Вашему комментарию к посту.
Дополнительно из комментариев то Garric
Автор очень хорошо описал принцип. ! Но это неудобно.
Нужно бы добавить. Если автор добавит это в статью то это будет Good.
Создаём файл .reg следующего содержания:
——
Windows Registry Editor Version 5.00
Currently I’m running Windows 7 x64 and usually I want all console tools to work with UTF-8 rather than with default code page 850.
Running chcp 65001
in the command prompt prior to use of any tools helps but is there any way to set is as default code page?
Changing HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCP
value to 65001
appear to make the system unable to boot in my case.
asked Apr 12, 2011 at 10:42
- Start -> Run -> regedit
- Go to
[HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorun] - Change the value to
@chcp 65001>nul
If Autorun
is not present, you can add a New String
1 gold badge
6 silver badges
10 bronze badges
answered Apr 12, 2011 at 12:22
Nils Magne Lunde
Nils Magne Lunde
1 gold badge
17 silver badges
14 bronze badges
This way it applies to all applications, even those ones that I don’t start from a command prompt!
(Which was necessary for me, since I was trying to edit Agda code from Atom.)


1 gold badge
16 silver badges
23 bronze badges
answered May 11, 2019 at 14:44

10 silver badges
11 bronze badges
Personally, I don’t like changing the registry. This can cause a lot of problems. I created a batch file:
@ECHO OFF
REM change CHCP to UTF-8
CHCP 65001
CLS I saved at C:\Windows\System32
as switch.bat
and created a link for cmd.exe
on the Desktop.
In the properties of the cmd shortcut, changed the destination to: C:\Windows\System32\cmd.exe /k switch
Voilà, when I need to type in UTF-8, I use this link.

answered Dec 7, 2013 at 15:36
5 silver badges
2 bronze badges
Edit the Registry:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
"OEMCP"="65001" Then restart. With this fix, if you are using Consolas font, it seems to lock
PowerShell into a small font size. cmd.exe
still works fine. As a workaround,
you can use Lucida Console, or I switched to Cascadia Mono:
answered Jun 13, 2015 at 20:39
This can be done by creating a PowerShell profile and adding the command “chcp 65001 >$null” to it:
PS> Set-ExecutionPolicy RemoteSigned
PS> New-Item -Path $Profile -ItemType file -Force
PS> notepad $Profile This doesn’t require editing the registry and, unlike editing a shortcut, will work if PowerShell is started in a specific folder using the Windows Explorer context menu.
ответил 3 сен 2017 в 20:56
- Щелкните правой кнопкой мыши значок Powershell в меню «Пуск» и выберите «Дополнительно» > «Открыть расположение файла».
- Щелкните правой кнопкой мыши ярлык Powershell и выберите «Свойства».
- Добавьте следующее в конец командной строки «Цель»:
-NoExit -Command "chcp 1252"
Будьте счастливы.
Не возитесь с реестром Windows, если у вас нет другого выбора.
ответил 2 ноя 2016 в 21:11
1 серебряный значок
1 бронзовый значок
Открыть в Powershell через проводник у меня по-прежнему не работает, хотя я пытался включить эту бета-функцию Unicode в языковых настройках.
Однако я обнаружил, что это сработало.
[HKEY_CURRENT_USER\Console\%SystemRoot%_System32_WindowsPowerShell_v1.0_powershell.exe]
"CodePage"=dword:0000fde9 
ответил 15 фев 2021 в 11:09
Если вы используете ConEmu
затем:
- Откройте «Настройки» в верхнем правом меню
- Перейдите в Startup -> Environment
- Добавить
chcp 65001
на новой линии. - Нажмите “Сохранить настройки”.
- Закройте ConEmu и снова откройте его

ответил 4 мая 2020 в 1:22

Вместо изменения реестра можно создать %HOMEPATH%\init.cmd
.
Мои гласят:
@ECHO OFF
CHCP 65001 > nul

ответил 21 янв в 9:39
1 серебряный значок
6 бронзовых знаков
Если, напротив, вас беспокоит отдельный аспект ограничений рендеринга символов Unicode
в окнах консоли см. среднюю и нижнюю части этого ответа
, где также обсуждаются альтернативные консольные (терминальные) приложения.
Предоставляет ли Microsoft улучшенную/полную альтернативу chcp 65001, которую можно сохранить навсегда без ручного изменения реестра?
Начиная с (как минимум) Windows 10
, версия 1903, у вас есть возможность установить языковой стандарт системы
( язык для программ, не поддерживающих Unicode
) в UTF-8
, но функция все еще находится в стадии бета-тестирования
на момент написания этой статьи
и имеет далеко идущие последствия
.
Чтобы активировать:
- Бежать
intl.cpl
(что открывает региональные настройки в Панели управления) - Следуйте инструкциям на скриншоте ниже.
Region > Administrative”>
Это устанавливает оба
активный OEM системы и
кодовая страница ANSI на65001
, кодовая страница UTF-8
, что поэтому (a) делает все будущие консольные окна
, которые используют OEM
кодовая страница, по умолчанию UTF-8 (как если быchcp 65001
был казнен вcmd.exeг.
window) и (b) также делает устаревший, не-Unicode GUI
-подсистемные приложения, которые (среди прочего) используют ANSI
кодовая страница, используйте UTF-8.Если вы используете Windows PowerShell
, это также составитGet-Content
иSet-Content
и другие контексты, в которых Windows PowerShell по умолчанию использует активную кодовую страницу ANSI системы, в частности чтение исходного кода
из файлов без спецификации
, по умолчанию UTF-8
(который PowerShell Core
(v6+) всегда так). Это означает, что в отсутствие-Encoding
аргумент, файлы без BOM, закодированные в кодировке ANSI (что исторически распространено), будут неправильно считаны, а файлы, созданные с помощьюSet-Content
будет кодироваться UTF-8, а не ANSI.- Аналогично, устаревшее (не поддерживающее Unicode) неконсольное приложение
s затем неправильно интерпретирует файлы в кодировке ANSI
.
- Аналогично, устаревшее (не поддерживающее Unicode) неконсольное приложение
Выберите шрифт TT (TrueType), но даже они обычно поддерживают только подмножество
всех персонажей
, поэтому вам, возможно, придется поэкспериментировать с определенными шрифтами, чтобы увидеть, представлены ли все нужные вам символы – см. этот ответ
для получения подробной информации, в которой также обсуждаются альтернативные консольные (терминальные) приложения, которые имеют лучшую поддержку рендеринга Unicode.
- Ас
ериксун
- указывает,
устаревшие консольные приложения, которые не «говорят» на UTF-8, будут ограничены
вводом только в формате ASCII
и выдаст неправильный вывод
при попытке вывести символы за пределами (7-битного) диапазона ASCII. (В устаревшей Windows 7 и ниже программы могут даже аварийно завершать работу
).Если вам важно запускать устаревшие консольные приложения, смотрите рекомендации eryksun в комментариях.
Однако
для- :
Необходимо дополнительно установить
Windows PowerShell
, то есть
не
достаточнопеременная предпочтения для UTF-8
- а также:
- Обратите внимание, что бег
chcp 65001
из внутрь
сеанс PowerShell не
эффективным, потому что . NET кэширует кодировку вывода консоли при запуске и не знает о более поздних изменениях, сделанных с помощьюchcp
; кроме того, как указано, Windows PowerShell
требуется$OutputEncoding
установить – см. этот ответ
для деталей.
[2]
; проще всего добавить эту команду в свой
(только текущий пользователь) или$OutputEncoding
(все пользователи) файл.$OutputEncoding = [System.Text.UTF8Encoding]::new()К счастью, в PowerShell в этом больше нет необходимости Core$PROFILE
, который внутренне последовательно по умолчанию использует кодировку UTF-8 без спецификации.$PROFILE.AllUsersCurrentHostПри установке системной локали
в UTF-8
не
вариант в вашей среде, используйте команды запуска
вместо:Примечание. Предостережение относительно устаревших консольных приложений, упомянутое выше, в равной степени применимо и здесь. Если вам важно запускать устаревшие консольные приложения, смотрите рекомендации eryksun в комментариях.
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding - Например, вот быстрый и грязный способ добавить эту строку в
$PROFILE
программно:
'$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding' + [Environment]::Newline + (Get-Content -Raw $PROFILE -ErrorAction SilentlyContinue) | Set-Content -Encoding utf8 $PROFILE - Например, вы можете использовать PowerShell, чтобы создать для вас это значение:
# Auto-execute `chcp 65001` whenever the current user opens a `cmd.exe` console
# window (including when running a batch file):
Set-ItemProperty 'HKCU:\Software\Microsoft\Command Processor' AutoRun 'chcp 65001 >NUL' Дополнительное чтение: почему Windows PowerShell ISE
плохой выбор:
В то время как ISE имеет лучший рендеринг Unicode
поддержку, чем консоль, это вообще плохой выбор:
Прежде всего, ISE устарел
: не поддерживает PowerShell (Core) 7+
, на который будут направлены все будущие разработки, и он не является кросс-платформенным, в отличие от новой основной IDE для обоих выпусков PowerShell, Visual Studio Code
, который по умолчанию уже использует кодировку UTF-8 для PowerShell Core
и может быть настроен для Windows PowerShell.ISE обычно является средой для разработки
скрипты, а не для их запуска
в производстве (если вы пишете сценарии (также) для других, вы должны предполагать, что они будут запускаться в консоли
); в частности, относительно бегущего
код, поведение ISE не такое, как у обычной консоли
:Плохая поддержка запуска внешних программ
, не только из-за отсутствия поддержки интерактивных
(см. следующий пункт), но и в отношении:Неправильное отображение вывода stderr в виде ошибок PowerShell
: см. этот ответ
.
ИСЭ точечные источники
вызовы файлов сценариев вместо их запуска в дочерней области
(последнее происходит в обычном окне консоли); то есть повторяется
вызовы выполняются в той же области видимости
. Это может привести к незаметным ошибкам, когда определения, оставленные предыдущим запуском, могут повлиять на последующие.
Region > Administrative”>
Проблема в том, что он скрывает консоль и перенаправляет вывод процесса (но не ввод) в канал. Большинство консольных приложений переключаются на полную буферизацию, когда файл является каналом. Кроме того, интерактивные приложения требуют чтения из стандартного ввода, что невозможно из скрытого окна консоли. ( Его можно открыть с помощью ShowWindow
, но отдельное окно для ввода неуклюже.)
Если вы готовы жить с этим ограничением, переключите активную кодовую страницу на
65001
(UTF-8) для правильной связи с внешними программами требуется неудобный обходной путь:Вы должны сначала принудительно создать скрытое окно консоли, запустив любую
внешняя программа из встроенной консоли, например,chcp
– вы увидите кратковременное мигание окна консоли.
Детали
- Чтобы читать/записывать Unicode на консоль, приложение (или его библиотека времени выполнения C) должно быть достаточно умным, чтобы использовать не
File-I/O
API, ноConsole-I/O
API. (Для примера см. , как это делает Python
.) - Аналогичным образом, чтобы читать аргументы командной строки Unicode, приложение (или его библиотека времени выполнения C) должно быть достаточно умным, чтобы использовать соответствующий API.
- Консольный рендеринг шрифтов поддерживает только символы Unicode в BMP
(другими словами: нижеU+10000
). Поддерживается только простой текстовый рендеринг (поэтому европейские — и некоторые восточноазиатские — языки должны работать нормально — поскольку используются предварительно составленные формы). Имеется [незначительный] мелкий шрифт
здесь для Восточной Азии и для символов U+0000, U+0001, U+30FB.]
Резюме
установить шрифт, раскладку клавиатуры (и опционально разрешить шестнадцатеричный ввод).
использовать только те программы, которые проходят через Console-I/O
API и принимать аргументы командной строки Unicode. Например, любой Cygwin
скомпилированная программа должна быть в порядке. Как я уже говорил, CMD
тоже хорошо.

ответил 16 декабря 2017 в 7:29
Решение, которое работает для меня:
В пакетном файле изменить кодировку страницы
Мой командный файл:
chcp 1250
copy "O:\VEŘEJNÉ\ŽŽŽŽŽŽ\Ž.xls" c:\temp Пакетный файл должен быть сохранен в CP 1250.

ответил 24 августа 2010 в 12:31
3 серебряных значка
2 бронзовых знака
Проверьте язык для программ, не поддерживающих Unicode. Если у вас проблемы с русским языком в консоли Windows, то вам следует установить русский здесь:


ответил
7 апр 2013 в 4:18
- Максим Ефремов
27 золотых значков $OutputEncoding
$OutputEncoding = [System.Text.UTF8Encoding]::new() 117 серебряных значков
166 бронзовых знаков $PROFILE
$PROFILE.AllUsersCurrentHost Довольно сложно изменить кодовую страницу консоли Windows по умолчанию. Когда вы ищете в Интернете, вы найдете разные предложения, однако некоторые из них могут полностью сломать вашу Windows, то есть ваш компьютер больше не загружается.
Или вы можете использовать этот небольшой пакетный скрипт для наиболее распространенных кодовых страниц.
Полный список всех доступных номеров, которые вы можете получить из идентификаторов кодовых страниц
ответил 2 ноя 2015 в 10:23
На компьютере с Windows 10 x64 я заставил командную строку отображать неанглийские символы следующим образом:
Вы увидите такой вывод:
Теперь нам нужно добавить шрифт TrueType, который поддерживает нужные вам символы, например Courier New. Мы делаем это, добавляя нули к имени строки, поэтому в этом случае следующим будет «000»:
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont" /v 000 /t REG_SZ /d "Courier New" Теперь реализуем поддержку UTF-8:
REG ADD HKCU\Console /v CodePage /t REG_DWORD /d 65001 /f Установите шрифт по умолчанию на «Courier New»:
REG ADD HKCU\Console /v FaceName /t REG_SZ /d "Courier New" /f Установить размер шрифта на 20:
REG ADD HKCU\Console /v FontSize /t REG_DWORD /d 20 /f Включите быстрое редактирование, если хотите:
REG ADD HKCU\Console /v QuickEdit /t REG_DWORD /d 1 /f

ответил 1 августа 2016 в 9:07
Алон Ор
7 серебряных значков
7 бронзовых знаков
На самом деле хитрость в том, что командная строка действительно понимает эти неанглийские символы, просто не может их правильно отобразить.
Когда я ввожу в командной строке путь, содержащий неанглийские символы, он отображается как “?? ?????? ?????”. Когда вы отправляете свою команду (cd “??? ?????? ?????” в моем случае), все работает, как и ожидалось.

ответил 14 апр 2009 в 13:03
22 золотых знака
79 серебряных значков
107 бронзовых знаков
Я нашел этот метод полезным в новых версиях Windows 10:
Включите эту функцию: «Бета-версия: используйте Unicode UTF-8 для поддержки языков во всем мире»

ответил 14 апр 2019 в 11:28

2 золотых значка
29 серебряных значков
48 бронзовых знаков
Один очень простой вариант — установить оболочку Windows bash, такую как MinGW
и используйте это:

Требуется немного обучения, так как вам нужно будет использовать функции командной строки Unix, но вам понравится их мощь, и вы можете установить набор символов консоли на UTF-8.

Конечно, вы также получаете все обычные возможности *nix, такие как grep, find, less и т. д.

ответил 2 января 2016 в 9:15

Стив Барнс
6 золотых значков
- См. ” Знакомство с Windows Terminal
(отКайла Корица
) и
Microsoft/Terminal
.Благодаря использованию шрифта Consolas, частично
Поддержка Unicode будет обеспечена.
63 серебряных знака
73 бронзовых знака
$PROFILE Начиная с июня 2019 года в Windows 10 вам не нужно менять кодовую страницу. $PROFILE.AllUsersCurrentHost
Как задокументировано в
выпуск 387
Нам нужна граница, и символы за этой границей должны обрабатываться резервным шрифтом / связыванием шрифтов / чем угодно.
Что должна освещать Консолас:
Символы, которые используются в качестве символов, используемых современными программами OSS в CLI.
Эти персонажи должны соответствовать дизайну и параметрам Консолас и должным образом соответствовать существующим персонажам Консолас.
Что Consolas НЕЛЬЗЯ освещать:
Символы и знаки препинания в письмах, помимо латинского, греческого и кириллического, особенно символы, требующие сложной формы (например, арабские).
Эти символы следует обрабатывать с помощью резервного шрифта.
ответил 6 мая 2019 в 20:36
528 золотых значков
4397 серебряных значков
- 5227 бронзовых знаков
Вам нужен шрифт с поддержкой Unicode. Windows поставляется с консолью Lucida, которую можно выбрать, $OutputEncoding щелкнув правой кнопкой мыши строку заголовка $OutputEncoding = [System.Text.UTF8Encoding]::new().
командной строки и нажав
вариант. Это также дает доступ к цветам. Обратите внимание, что вы также можете изменить настройки для командных окон, вызываемых определенным образом (например, открыть здесь, Visual Studio), выбрав Properties
вместо.
cp65001, что, по-видимому, является попыткой Microsoft предложить поддержку UTF-7 и UTF-8 для командной строки. Сделайте это, запустив
chcp 65001в командной строке
. После установки он остается таким до тех пор, пока окно не будет закрыто. Вам нужно будет повторять это каждый раз, когда вы запускаете cmd.exe.
У некоторых программ возникают проблемы при взаимодействии с этой кодировкой, примечательной из которых является MinGW, который дает сбой при компиляции с бессмысленным сообщением об ошибке. Тем не менее, это работает очень хорошо и не вызывает ошибок в большинстве программ.
ответил 7 апр 2016 в 1:49

16 серебряных значков
29 бронзовых знаков
Эта проблема довольно раздражает. Обычно у меня есть китайский символ в имени файла и содержимом файла. Обратите внимание, что я использую Windows 10, вот мое решение:
Для отображения имени файла
, например dir
или ls
если вы установили Ubuntu bash в Windows 10
Установить регион для поддержки символов, отличных от utf 8.
После этого шрифт консоли будет изменен на шрифт этой локали, а также изменится кодировка консоли.
После выполнения предыдущих шагов, чтобы отобразить содержимое файла
файла UTF-8 с помощью инструмента командной строки
- Изменить страницу на utf-8 с помощью
chcp 65001 - Перейдите на шрифт, поддерживающий utf-8, например Lucida Console
- Использовать
type
команда для просмотра содержимого файла илиcat
если вы установили Ubuntu bash в Windows 10 - Обратите внимание, что после установки кодировки консоли на utf-8 я не могу ввести китайский символ в cmd, используя китайский метод ввода.
Самое ленивое решение: просто используйте эмулятор консоли, такой как http://cmder.net/
ответил 22 января 2017 в 6:02
5 золотых значков
34 серебряных знака
51 бронзовый знак
Быстрое решение для файлов .bat, если ваш компьютер правильно отображает путь/имя файла при вводе его в DOS-окне:
- копировать con temp.txt
[нажмите Enter] - Введите путь/имя файла [нажмите Enter]
- Нажмите Ctrl-Z
[нажмите Enter]
Таким образом вы создаете файл .txt – temp.txt. Откройте его в Блокноте, скопируйте текст (не волнуйтесь, он будет выглядеть нечитаемым) и вставьте его в свой .bat-файл.
Запуск созданного таким образом .bat в DOS-окне у меня работал (кириллица, болгарка).
ответил 9 апр 2015 в 8:52

Для аналогичной проблемы (моей проблемой было отображение символов UTF-8 из MySQL в командной строке),
Я решил это так:
Я изменил шрифт командной строки на Lucida Console. (Этот шаг не должен иметь отношения к вашей ситуации. Он связан только с тем, что вы видите на экране, а не с тем, что на самом деле является персонажем).
Я изменил кодовую страницу на Windows-1253. Вы делаете это в командной строке «chcp 1253». Это сработало для моего случая, когда я хотел увидеть UTF-8.

ответил 2 декабря 2012 в 12:41
Windows использует UTF-16
для кодирования двухбайтовыми строками, поэтому вам нужно получить их из ОС в вашей программе. Есть два способа сделать это—
Чтение UTF-8 везде
для получения подробной информации, особенно если вы поддерживаете другие операционные системы.

ответил
Более чистое решение: просто установите доступный бесплатный языковой пакет Microsoft для японского языка. (Подходят и другие восточные языковые пакеты, но я протестировал японский.)
Это дает вам шрифты с большим набором глифов, делает их поведением по умолчанию, изменяет различные инструменты Windows, такие как cmd, WordPad и т. д.

ответил 31 мая 2013 в 12:19
Мне помогло изменение кодовой страницы на 1252. Проблема для меня заключается в том, что символ двойной кукла § преобразуется в другой символ DOS на Windows Server 2008.
Я использовал CHCP 1252 и колпачок перед ним в своем заявлении BCP ^§.

ответил 12 фев 2015 в 7:18

Я решил похожую проблему, удаляя файлы с именами Unicode, ссылаясь на них в командном файле по их коротким (8 точек 3) именам.
Короткие имена можно просмотреть, выполнив dir /x
. Очевидно, это работает только с именами файлов Unicode, которые уже известны.

ответил 2 декабря 2015 в 13:39
Внимание для тех, кто использует WSL
кому также не нужны дополнительные пакеты от Cygwin или Git, wsltty
доступен только терминал с поддержкой UTF-8.

ответил 6 июня 2022 в 7:35
Практические соображения
значения по умолчанию
на Window не очень полезны. Для лучшего опыта необходимо настроить три элемента конфигурации:Еще одна проблема с «Вставкой» в консольное приложение (очень технично):
- Шестнадцатеричный ввод выводит символ на KeyUp
из Альт
; все
другие способы доставки персонажа происходят на KeyDown
; так много приложений не готовы видеть символ на KeyUp
. (Применимо только к приложениям, использующим Console-I/O
API.) - Вывод: многие приложения не будут реагировать на события шестнадцатеричного ввода.
- Более того, что происходит с «Вставленным» символом, зависит от текущей раскладки клавиатуры: можно ли набрать символ без использования префиксных клавиш (но с произвольной сложной комбинацией модификаторов, как в Ctrl
+ Альт
+ AltGr
+ Кана
+ Сдвиг
+ Серый
), то он доставляется при эмулированном нажатии клавиши. Это то, что ожидает любое приложение — поэтому вставка всего, что содержит только такие символы, допустима. - Однако «другие» символы доставляются с помощью эмуляции шестнадцатеричного ввода
.
Заключение
: если ваша раскладка клавиатуры не поддерживает ввод много
символов без префиксных ключей, некоторые глючные приложения
может пропускать символы, когда выPaste
через интерфейс консоли: Alt
+ Пробел
, Э
+ П
. ( Это
Вот почему я рекомендую использовать мои раскладки клавиатуры!)- Шестнадцатеричный ввод выводит символ на KeyUp
Следует также иметь в виду, что «альтернативные, «более мощные» консоли» для Windows вообще не являются консолями
. Они не поддерживают Console-I/O
API, поэтому программы, которые полагаются на эти API, не будут работать. (Однако программы, использующие только «API File-I/O для дескрипторов файлов консоли», будут работать нормально.)
Одним из примеров такой не-консоли является часть Microsoft PowerShell
. Я им не пользуюсь; для эксперимента нажмите и отпустите клавишу Windows
, а затем введите powershell
.
(С другой стороны, есть такие программы, как ConEmu
или АНСИКОН
которые пытаются сделать больше: они «пытаются» перехватить Console-I/O
API, чтобы заставить работать «настоящие консольные приложения». Это определенно работает для игрушечных программ-примеров; в реальной жизни это может решить или не решить ваши конкретные проблемы. Эксперимент.)


