Использование кодировки UTF-8 (CHCP 65001) в командной строке

Печать

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

Например, команда help выводит нормальный текст:

cmd-normal-encoding-866

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

cmd-wrong-encoding-1251

Так может происходить, к примеру, если текущая кодировка консоли 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> 

cmd-normal-encoding-1251

К сожалению, заранее угадать, в какой кодировке выводится текст, невозможно, поэтому проще попробовать установить командой 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?

Peter Mortensen's user avatar

asked Dec 23, 2008 at 9:30

Vilx-'s user avatar

 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

kgiannakakis's user avatar

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 with cp65001
    , 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?

Kamil Maciorowski's user avatar

asked Jan 5, 2017 at 13:58

user1107888's user avatar

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

DavidPostill's user avatar

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 

Kamil Maciorowski's user avatar

answered Feb 21, 2018 at 15:09

Raul N-k's user avatar

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

nobjta_9x_tq's user avatar

 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

Gord Hooker's user avatar

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's user avatar

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

J.Hudler's user avatar


Время чтение:


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

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

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

Русский текст в CMD

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

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

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

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

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

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

cmd сменить кодировку

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

cmd смена кодировки

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

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

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

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


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

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

поменять кодировку cmd

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

:/>  Доступ к локальному хосту (xampp) с другого компьютера через сеть LAN – как?

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

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

поменять кодировку cmd

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

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

Дополнительно из комментариев то 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.

Community's user avatar

asked Apr 12, 2011 at 10:42

Regent's user avatar

  1. Start -> Run -> regedit
  2. Go to [HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorun]
  3. Change the value to @chcp 65001>nul

If Autorun
is not present, you can add a New String

Nabi K.A.Z.'s user avatar

1 gold badge
6 silver badges
10 bronze badges

answered Apr 12, 2011 at 12:22

Nils Magne Lunde's user avatar

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.)

Windows screenshot - Region Settings - UTF-8

Bob Stein's user avatar

1 gold badge
16 silver badges
23 bronze badges

answered May 11, 2019 at 14:44

Isti115's user avatar

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.

Matthieu's user avatar

answered Dec 7, 2013 at 15:36

juca's user avatar

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

Zombo's user avatar

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

Freon Sandoz's user avatar

  1. Щелкните правой кнопкой мыши значок Powershell в меню «Пуск» и выберите «Дополнительно» > «Открыть расположение файла».
  2. Щелкните правой кнопкой мыши ярлык Powershell и выберите «Свойства».
  3. Добавьте следующее в конец командной строки «Цель»: -NoExit -Command "chcp 1252"

Будьте счастливы.
Не возитесь с реестром Windows, если у вас нет другого выбора.

ответил 2 ноя 2016 в 21:11

JColares's user avatar

1 серебряный значок
1 бронзовый значок

Открыть в Powershell через проводник у меня по-прежнему не работает, хотя я пытался включить эту бета-функцию Unicode в языковых настройках.

Однако я обнаружил, что это сработало.

 [HKEY_CURRENT_USER\Console\%SystemRoot%_System32_WindowsPowerShell_v1.0_powershell.exe]
"CodePage"=dword:0000fde9  

Manually changing the

ответил 15 фев 2021 в 11:09

Daniel Cheung's user avatar

Если вы используете ConEmu
затем:

  1. Откройте «Настройки» в верхнем правом меню
  2. Перейдите в Startup -> Environment
  3. Добавить chcp 65001
    на новой линии.
  4. Нажмите “Сохранить настройки”.
  5. Закройте ConEmu и снова откройте его

enter image description here

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

Ryan Shillington's user avatar

Вместо изменения реестра можно создать %HOMEPATH%\init.cmd
.

Мои гласят:

 @ECHO OFF
CHCP 65001 > nul 

RockPaperLz- Mask it or Casket's user avatar

ответил 21 янв в 9:39

user333869's user avatar

1 серебряный значок
6 бронзовых знаков

  • Если, напротив, вас беспокоит отдельный аспект ограничений рендеринга символов Unicode

    в окнах консоли см. среднюю и нижнюю части этого ответа
    , где также обсуждаются альтернативные консольные (терминальные) приложения.


Предоставляет ли Microsoft улучшенную/полную альтернативу chcp 65001, которую можно сохранить навсегда без ручного изменения реестра?

Начиная с (как минимум) Windows 10
, версия 1903, у вас есть возможность установить языковой стандарт системы
( язык для программ, не поддерживающих Unicode
) в UTF-8

, но функция все еще находится в стадии бета-тестирования
на момент написания этой статьи

и имеет далеко идущие последствия
.

Чтобы активировать:

  • Бежать intl.cpl
    (что открывает региональные настройки в Панели управления)
  • Следуйте инструкциям на скриншоте ниже.

Использование кодировки UTF-8 (CHCP 65001) в командной строке 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
          .
      • Выберите шрифт TT (TrueType), но даже они обычно поддерживают только подмножество
        всех персонажей

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

      • Ас

        ериксун

      • указывает,
      • устаревшие консольные приложения, которые не «говорят» на UTF-8, будут ограничены

        вводом только в формате ASCII
        и выдаст
        неправильный вывод
        при попытке вывести символы за пределами (7-битного) диапазона ASCII

        . (В устаревшей Windows 7 и ниже программы могут даже аварийно завершать работу
        ).

        Если вам важно запускать устаревшие консольные приложения, смотрите рекомендации eryksun в комментариях.

          Однако
          для

          Windows PowerShell

          , то есть

          не
          достаточно

        • :


          Необходимо дополнительно установить

        переменная предпочтения для UTF-8

          а также:

        • [2]
          ; проще всего добавить эту команду в свой

          (только текущий пользователь) или $OutputEncoding
          (все пользователи) файл.

          $OutputEncoding = [System.Text.UTF8Encoding]::new() К счастью, в PowerShell в этом больше нет необходимости Core $PROFILE
          , который внутренне последовательно по умолчанию использует кодировку UTF-8 без спецификации.

          $PROFILE.AllUsersCurrentHost

        • При установке системной локали

          в UTF-8

          не
          вариант в вашей среде, используйте
          команды запуска
          вместо:


          Примечание. Предостережение относительно устаревших консольных приложений, упомянутое выше, в равной степени применимо и здесь. Если вам важно запускать устаревшие консольные приложения, смотрите рекомендации eryksun в комментариях.


          • Обратите внимание, что бег chcp 65001
            из внутрь
            сеанс PowerShell не
            эффективным, потому что . NET кэширует кодировку вывода консоли при запуске и не знает о более поздних изменениях, сделанных с помощью chcp
            ; кроме того, как указано, Windows PowerShell
            требуется $OutputEncoding
            установить – см. этот ответ
            для деталей.

           $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
                : см. этот ответ
                .

            • ИСЭ точечные источники
              вызовы файлов сценариев вместо их запуска в дочерней области
              (последнее происходит в обычном окне консоли); то есть повторяется
              вызовы выполняются в той же области видимости

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

          • Использование кодировки UTF-8 (CHCP 65001) в командной строке 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
            тоже хорошо.

          Peter Mortensen's user avatar

          ответил 16 декабря 2017 в 7:29

          Ilya Zakharevich's user avatar

          Решение, которое работает для меня:

          В пакетном файле изменить кодировку страницы

          Мой командный файл:

           chcp 1250
          copy "O:\VEŘEJNÉ\ŽŽŽŽŽŽ\Ž.xls" c:\temp 

          Пакетный файл должен быть сохранен в CP 1250.

          Peter Mortensen's user avatar

          ответил 24 августа 2010 в 12:31

          vanna's user avatar

          3 серебряных значка
          2 бронзовых знака

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

          Changing language for non-Unicode programs

          Peter Mortensen's user avatar

          ответил

        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 

          Peter Mortensen's user avatar

          ответил 1 августа 2016 в 9:07

          Alon Or's user avatar

          Алон Ор

          7 серебряных значков
          7 бронзовых знаков

          На самом деле хитрость в том, что командная строка действительно понимает эти неанглийские символы, просто не может их правильно отобразить.

          Когда я ввожу в командной строке путь, содержащий неанглийские символы, он отображается как “?? ?????? ?????”. Когда вы отправляете свою команду (cd “??? ?????? ?????” в моем случае), все работает, как и ожидалось.

          Peter Mortensen's user avatar

          ответил 14 апр 2009 в 13:03

          User's user avatar

          22 золотых знака
          79 серебряных значков
          107 бронзовых знаков

          Я нашел этот метод полезным в новых версиях Windows 10:

          Включите эту функцию: «Бета-версия: используйте Unicode UTF-8 для поддержки языков во всем мире»

          Region Settings

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

          zvi's user avatar

          2 золотых значка
          29 серебряных значков
          48 бронзовых знаков

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

          Enter image description here

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

          Enter image description here

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

          Peter Mortensen's user avatar

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

          Steve Barnes's user avatar

          Стив Барнс

          6 золотых значков

            63 серебряных знака

            73 бронзовых знака

            $PROFILE Начиная с июня 2019 года в Windows 10 вам не нужно менять кодовую страницу. $PROFILE.AllUsersCurrentHost

          • См. ” Знакомство с Windows Terminal
            (от


            Кайла Корица

            ) и Microsoft/Terminal

            .

            Благодаря использованию шрифта Consolas, частично
            Поддержка Unicode будет обеспечена.

          • Как задокументировано в

        выпуск 387

      • :

      • В настоящее время в Юникоде насчитывается 87 887 иероглифов. Вам тоже все они нужны?

        Нам нужна граница, и символы за этой границей должны обрабатываться резервным шрифтом / связыванием шрифтов / чем угодно.

        Что должна освещать Консолас:

      • Символы, которые используются в качестве символов, используемых современными программами OSS в CLI.

        Эти персонажи должны соответствовать дизайну и параметрам Консолас и должным образом соответствовать существующим персонажам Консолас.

        Что Consolas НЕЛЬЗЯ освещать:

      • Символы и знаки препинания в письмах, помимо латинского, греческого и кириллического, особенно символы, требующие сложной формы (например, арабские).

        Эти символы следует обрабатывать с помощью резервного шрифта.


      • ответил
        6 мая 2019 в 20:36

      • 528 золотых значков
        4397 серебряных значков

          5227 бронзовых знаков

      • Поскольку я не видел полных ответов на Python 2.7, я опишу два важных шага и необязательный шаг, который весьма полезен.

      • Вам нужен шрифт с поддержкой Unicode. Windows поставляется с консолью Lucida, которую можно выбрать, $OutputEncoding щелкнув правой кнопкой мыши строку заголовка $OutputEncoding = [System.Text.UTF8Encoding]::new().
        командной строки и нажав
        вариант. Это также дает доступ к цветам. Обратите внимание, что вы также можете изменить настройки для командных окон, вызываемых определенным образом (например, открыть здесь, Visual Studio), выбрав Properties
        вместо.

      • Вам нужно установить кодовую страницу на cp65001
        , что, по-видимому, является попыткой Microsoft предложить поддержку UTF-7 и UTF-8 для командной строки. Сделайте это, запустив chcp 65001
        в командной строке

        . После установки он остается таким до тех пор, пока окно не будет закрыто. Вам нужно будет повторять это каждый раз, когда вы запускаете cmd.exe.
      • У некоторых программ возникают проблемы при взаимодействии с этой кодировкой, примечательной из которых является MinGW, который дает сбой при компиляции с бессмысленным сообщением об ошибке. Тем не менее, это работает очень хорошо и не вызывает ошибок в большинстве программ.

        Community's user avatar

        ответил 7 апр 2016 в 1:49

        Aaron3468's user avatar

        16 серебряных значков
        29 бронзовых знаков

        Эта проблема довольно раздражает. Обычно у меня есть китайский символ в имени файла и содержимом файла. Обратите внимание, что я использую Windows 10, вот мое решение:

        Для отображения имени файла
        , например dir
        или ls
        если вы установили Ubuntu bash в Windows 10

        1. Установить регион для поддержки символов, отличных от utf 8.

        2. После этого шрифт консоли будет изменен на шрифт этой локали, а также изменится кодировка консоли.

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

        1. Изменить страницу на utf-8 с помощью chcp 65001
        2. Перейдите на шрифт, поддерживающий utf-8, например Lucida Console
        3. Использовать type
          команда для просмотра содержимого файла или cat
          если вы установили Ubuntu bash в Windows 10
        4. Обратите внимание, что после установки кодировки консоли на utf-8 я не могу ввести китайский символ в cmd, используя китайский метод ввода.

        Самое ленивое решение: просто используйте эмулятор консоли, такой как http://cmder.net/

        ответил 22 января 2017 в 6:02

        code4j's user avatar

        5 золотых значков
        34 серебряных знака
        51 бронзовый знак

        Быстрое решение для файлов .bat, если ваш компьютер правильно отображает путь/имя файла при вводе его в DOS-окне:

        1. копировать con temp.txt

          [нажмите Enter]
        2. Введите путь/имя файла [нажмите Enter]
        3. Нажмите Ctrl-Z

          [нажмите Enter]

        Таким образом вы создаете файл .txt – temp.txt. Откройте его в Блокноте, скопируйте текст (не волнуйтесь, он будет выглядеть нечитаемым) и вставьте его в свой .bat-файл.
        Запуск созданного таким образом .bat в DOS-окне у меня работал (кириллица, болгарка).

        ответил 9 апр 2015 в 8:52

        S. Hristov's user avatar

        Для аналогичной проблемы (моей проблемой было отображение символов UTF-8 из MySQL в командной строке),

        Я решил это так:

        1. Я изменил шрифт командной строки на Lucida Console. (Этот шаг не должен иметь отношения к вашей ситуации. Он связан только с тем, что вы видите на экране, а не с тем, что на самом деле является персонажем).

        2. Я изменил кодовую страницу на Windows-1253. Вы делаете это в командной строке «chcp 1253». Это сработало для моего случая, когда я хотел увидеть UTF-8.

        Peter Mortensen's user avatar

        ответил 2 декабря 2012 в 12:41

        Christoforos's user avatar

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

        Чтение UTF-8 везде

        для получения подробной информации, особенно если вы поддерживаете другие операционные системы.

        Peter Mortensen's user avatar

        ответил

      • 31 августа 2018 в 14:53

        Более чистое решение: просто установите доступный бесплатный языковой пакет Microsoft для японского языка. (Подходят и другие восточные языковые пакеты, но я протестировал японский.)

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

        Peter Mortensen's user avatar

        ответил 31 мая 2013 в 12:19

        Mike Beckerle's user avatar

        Мне помогло изменение кодовой страницы на 1252. Проблема для меня заключается в том, что символ двойной кукла § преобразуется в другой символ DOS на Windows Server 2008.

        Я использовал CHCP 1252 и колпачок перед ним в своем заявлении BCP ^§.

        Peter Mortensen's user avatar

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

        madhav bitra's user avatar

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

        Короткие имена можно просмотреть, выполнив dir /x
        . Очевидно, это работает только с именами файлов Unicode, которые уже известны.

        Peter Mortensen's user avatar

        ответил 2 декабря 2015 в 13:39

        Michael's user avatar

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

        Peter Mortensen's user avatar

        ответил 6 июня 2022 в 7:35

        afkjm's user avatar

        Практические соображения

        • значения по умолчанию
          на Window не очень полезны. Для лучшего опыта необходимо настроить три элемента конфигурации:

        • Еще одна проблема с «Вставкой» в консольное приложение (очень технично):

          • Шестнадцатеричный ввод выводит символ на KeyUp
            из Альт
            ; все
            другие способы доставки персонажа происходят на KeyDown
            ; так много приложений не готовы видеть символ на KeyUp
            . (Применимо только к приложениям, использующим Console-I/O
            API.)
          • Вывод: многие приложения не будут реагировать на события шестнадцатеричного ввода.
          • Более того, что происходит с «Вставленным» символом, зависит от текущей раскладки клавиатуры: можно ли набрать символ без использования префиксных клавиш (но с произвольной сложной комбинацией модификаторов, как в Ctrl
            + Альт
            + AltGr
            + Кана
            + Сдвиг
            + Серый
            ), то он доставляется при эмулированном нажатии клавиши. Это то, что ожидает любое приложение — поэтому вставка всего, что содержит только такие символы, допустима.
          • Однако «другие» символы доставляются с помощью эмуляции шестнадцатеричного ввода
            .

          Заключение

          : если ваша раскладка клавиатуры не поддерживает ввод много
          символов без префиксных ключей, некоторые глючные приложения
          может пропускать символы, когда вы Paste
          через интерфейс консоли: Alt
          + Пробел
          , Э
          + П
          . ( Это
          Вот почему я рекомендую использовать мои раскладки клавиатуры!)

        Следует также иметь в виду, что «альтернативные, «более мощные» консоли» для Windows вообще не являются консолями
        . Они не поддерживают Console-I/O
        API, поэтому программы, которые полагаются на эти API, не будут работать. (Однако программы, использующие только «API File-I/O для дескрипторов файлов консоли», будут работать нормально.)

        Одним из примеров такой не-консоли является часть Microsoft PowerShell
        . Я им не пользуюсь; для эксперимента нажмите и отпустите клавишу Windows

        , а затем введите powershell
        .


        (С другой стороны, есть такие программы, как ConEmu

        или АНСИКОН

        которые пытаются сделать больше: они «пытаются» перехватить Console-I/O
        API, чтобы заставить работать «настоящие консольные приложения». Это определенно работает для игрушечных программ-примеров; в реальной жизни это может решить или не решить ваши конкретные проблемы. Эксперимент.)