Как использовать символы юникода в командной строке Windows?

У нас есть проект в Team Foundation Server (TFS), в котором используется не английский символ (š). При попытке написать сценарий для некоторых вещей, связанных со сборкой, мы столкнулись с проблемой - мы не можем передать букву š инструментам командной строки. Командная строка или что-то еще портит ее, и утилита tf.exe не может найти указанный проект.

Я пробовал разные форматы для файла .bat (ANSI, UTF-8 с Спецификация и без него), а также писал его в JavaScript (который по своей сути является Unicode) - но не повезло. Как выполнить программу и передать ей командную строку Юникод?

@JohannesDewender - Копирование и вставка пошли не так?

Vilx- 19.12.2012 12:25

Python 3.6: «консоль по умолчанию в Windows принимает все символы Unicode с этой версией» (ну, большая часть для меня) НО вам нужно настроить консоль: щелкните правой кнопкой мыши в верхней части окна (cmd или python IDLE ), в default / font выберите "Lucida console".

JinSnow 13.01.2017 23:48

Возможный дубликат Как выводить строки Unicode на консоли Windows

phuclv 28.05.2017 07:07

@ LưuVĩnhPhúc - Нет, речь идет о передаче аргументов командной строки Unicode, а не отображении текста в консоли. Консоль может вообще не вмешиваться.

Vilx- 28.05.2017 14:08
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
321
5
463 724
17

Ответы 17

Пытаться:

chcp 65001

который изменит кодовую страницу на UTF-8. Также вам нужно использовать консольные шрифты Lucida.

Вы знаете, есть ли способ сделать это по умолчанию?

AnnanFay 14.11.2011 17:55

Мною шрифт Lucida остается выбранным, но chcp нужно набирать каждый раз ... в любом случае большое спасибо за этот совет, я даже не думал, что это возможно :)

Danubian Sailor 21.11.2011 19:41

Обратите внимание, что в поддержке кодовой страницы 65001 Windows есть серьезные ошибки реализации, которые нарушат работу многих приложений, которые полагаются на методы ввода-вывода стандартной библиотеки C, так что это очень хрупко. (Пакетные файлы также просто перестают работать в 65001.) К сожалению, UTF-8 - второсортный гражданин в Windows.

bobince 30.12.2011 01:51

Проголосовал за всех и принял этот ответ, потому что он получил наибольшее количество голосов. Мы отказались от TFS вскоре после публикации этого вопроса, поэтому он больше не актуален. Я также не могу сказать, работает это или нет, потому что у нас больше нет сервера TFS для тестирования.

Vilx- 28.01.2012 17:30

@bobince У вас есть пример ошибки в поддержке кодовой страницы 65001 в Windows? Мне любопытно, потому что я никогда не встречал ни одного, и поиск в Google тоже ничего не дал. (Пакетные файлы, конечно, перестают работать, но UTF-8 вряд ли является второсортным ...)

Roman Starkov 03.12.2012 06:09

@romkyns: Насколько я понимаю, вызовы, возвращающие количество байтов (например, fread / fwrite / и т. д.), на самом деле возвращают количество символов. Это вызывает множество симптомов, таких как неполное чтение ввода, зависания в fflush, битые командные файлы и т. д. Немного предыстории. Кодовые страницы по умолчанию, используемые для "многобайтовых" локалей CJK, имеют специальную встроенную обработку, чтобы исправить это, но 65001 этого не делает - это не поддерживается.

bobince 04.12.2012 16:26

@bobince а, спасибо, это было интересно. Также был найден это, в котором есть дополнительная информация о статусе ошибки ...

Roman Starkov 04.12.2012 17:31

@romkyns: ага! Спасибо, я знал, что читал об этом больше в блоге Каплана, но не мог выкопать пост. Удивительно, как долго это длилось без исправления (или даже без адекватной документации).

bobince 05.12.2012 06:29

@romkyns, и хотя я опаздываю, вот ошибка с Python 3.3.2 в Windows XP и консоли с chcp 65001 и Lucida Console: просто создайте строку «s» с символами от 945 до 969 (это греческий алфавит) . Тогда просто попробуйте показать «s» (даже не называя «print»). Он напечатан на трех строках, с буквой «s» в первой, мусором и двумя другими.

user1220978 31.07.2013 11:45

Интересный вопрос здесь - это ошибка, потому что он должен сообщать байты, а вместо этого сообщает символы, или потому, что приложения, использующие его, неправильно приняли символы bytes =? Другими словами, это сбой API или сбой использования API?

Basic 27.11.2013 17:04

Обновлен блог Kaplan о сломанном UTF-8 в Windows доступна здесь, поскольку Microsoft удалила все его сообщения в блоге после того, как он неправильно обработал верхнюю часть страницы.

alexchandel 11.09.2015 07:51

У меня не работает с еврейскими символами в Windows 10 (консоль Lucida + chcp 65001),

Ohad Schneider 26.12.2016 01:16

Лучше используйте шрифт «Consolas». В Lucida Console отсутствуют символы Юникода, например 02B9.

asmaier 15.01.2017 15:24

Чтобы сделать utf-8 кодировкой по умолчанию: перейдите к [HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorun] и установите для него chcp 65001

maviz 05.03.2017 04:36

Поддержка консоли (conhost.exe) кодовой страницы 65001 в корне нарушена (как для ввода, так и для вывода в Windows 7, но все еще не работает для ввода в Windows 10). Пожалуйста, удалите это предложение, чтобы не повторять этот плохой совет в бесконечном цикле наивной «помощи». Оболочка cmd - это приложение Unicode, которое использует консольный интерфейс UTF-16 API и базовые API CreateProcessW и ShellExecuteExW. Если есть проблема с обработкой командной строки, это потому, что приложение использует версию char * в кодировке ANSI из стандартного C main вместо wchar_t * из точки входа wmain.

Eryk Sun 05.03.2017 20:30

Из-за плохой поддержки вам лучше использовать альтернативные консоли, если вам нужен надежный Unicode. Например, Console2 для программ Windows и mintty для программ Cygwin (именно поэтому они в первую очередь развернули mintty).

ivan_pozdeev 28.10.2017 05:23

@eryksun как насчет шрифта? У меня сложилось впечатление, что cmd в основном использует для отображения 8-битные точки символов, поэтому он не может поддерживать более 256 одновременно.

ivan_pozdeev 28.10.2017 05:32

@ivan_pozdeev, CMD - это стандартная оболочка ввода-вывода, а не консоль или терминал. Для дескрипторов консоли он использует функции консоли Unicode ReadConsoleW и WriteConsoleW, которые считывают и записывают текст UTF-16 из и в связанный с ним хост-процесс консоли, conhost.exe. Если дескриптор файла не является консолью (например, чтение пакетного файла или чтение конвейерного ввода из цикла for /f или перенаправление dir в конвейер), встроенные команды CMD используют кодовую страницу ввода или вывода консоли в качестве кодировки. Для вывода вы можете переопределить это на UTF-16 с помощью опции CMD /u.

Eryk Sun 28.10.2017 08:00

@ivan_pozdeev, в консоли используются 16-битные символьные ячейки. В принципе, он может отображать любой символ в BMP. Однако он не использует Uniscribe / DirectWrite, поэтому не поддерживает сложные сценарии (например, текст с письмом справа налево) или автоматические резервные шрифты. Ручное связывание шрифтов в реестре возможно, но результаты не очень хорошие, поэтому на практике это ограничивается тем, что поддерживает текущий шрифт. Символ за пределами BMP записывается как суррогатная пара UTF-16 в двух логически отдельных ячейках, поэтому он отображается как два глифа по умолчанию (например, пустые поля), но его можно скопировать в буфер обмена.

Eryk Sun 28.10.2017 08:07
–1 UTF-8 в консолях работает только частично и только для вывода. Кроме того, вопрос не в вводе-выводе, а в аргументах командной строки. На данный момент более 300 некомпетентных специалистов поддержали этот совет. Это поразительно.
Cheers and hth. - Alf 04.11.2017 22:28

@ Cheersandhth.-Alf, заголовок довольно общий, я предполагаю, что именно поэтому многие поисковые системы сначала попадают на эту страницу. Однако, помимо несомненного ограничения / ошибки, я думаю, что chcp 65001 достаточно для 99% людей, имеющих проблемы с «Unicode в командной строке».

Wernfried Domscheit 06.02.2018 14:03

@WernfriedDomscheit: Какая первая часть «UTF-8 в консолях работает только частично и только для вывода», которую вы не смогли понять?

Cheers and hth. - Alf 06.02.2018 20:11

@ Cheersandhth.-Альф, я понимаю суть проблемы. Однако для типичного варианта использования, например echo € > euro.txt и type euro.txt, этого решения достаточно для большинства людей. Такие команды не работают с кодовой страницей 850 (значение по умолчанию для Западной Европы).

Wernfried Domscheit 06.02.2018 21:23

«решение достаточно для большинства людей» Это не решение. Это совет сродни засыпке сахара в бензобак машины, банальному саботажу. А насчет «я понимаю проблему» - нет, вы не понимаете. Учитывая это утверждение, я советую прочитать об эффекте Даннинга-Крюгера.

Cheers and hth. - Alf 06.02.2018 22:28

@ Cheers и hth. - Альф: Почти 300 тысяч человек пришли к этому вопросу из-за названия. Подавляющее большинство не прочитали основной вопрос. Они сразу же скопировали и вставили код из первого ответа, это сработало для них, проголосовало и продолжило свою жизнь. Скорее всего, им больше не придется иметь дело с тонкостями командной строки Windows. Они просто хотели запустить простую программу и продолжить свою работу. Им не нужен глубокий опыт, которым вы, очевидно, обладаете, и они не некомпетентны. Не нужно быть грубым.

kgiannakakis 07.02.2018 12:00

@OhadSchneider версия Windows <= 1709 не может использовать chcp, и я тоже потерпел неудачу.

Rick 06.06.2018 19:28

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

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

Это, вероятно, немного опасно, так как может возникнуть конфликт имен. например, если у вас есть два файла, которые отображаются как «???», и вы вводите «cd ???» он не знал бы, что использовать (или, что еще хуже, выберет произвольный).

John 16.06.2009 17:53

Вы не вводите ???, вы вводите настоящее имя, оно просто отображается как ???. Думайте об этом как о поле для ввода пароля. Все, что вы вводите, отображается как ***, но отправленный - это исходный текст.

User 16.06.2009 18:52

Это действительно работает для команд, запускаемых непосредственно в командной строке. Однако при запуске командного файла .cmd мне все равно нужно поместить chcp 65001 в начало командного файла.

wisbucky 24.10.2017 01:07

В вашем случае это проблема со шрифтом ... контент есть, просто нет подходящего шрифта для его отображения. Но OP другое.

WesternGun 30.10.2017 15:58

У меня была такая же проблема (я из Чехии). У меня английская версия Windows, и мне приходится работать с файлами на общем диске. Пути к файлам включают символы, специфичные для чешского языка.

Решение, которое мне подходит:

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

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

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

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

Учтите, что консоль не будет правильно отображать символы, но поймет их ...

Ваше здоровье! Мне это было нужно, чтобы я мог ввести символ авторского права в свой командный файл.

Lea Hayes 30.07.2012 07:18

Это отлично сработало и у меня в ситуации, почти идентичной вашей. Вместо этого мой путь содержал ирландские гэльские символы, то есть á, é, í, ó и ú.

Seany84 05.02.2014 01:43

@vanna, которая решает мою "проблему с турецкими символами и пробелами в пути в сети". ты замечательный.

caglaror 04.12.2014 14:39

Также найдите эти ресурсы: msdn.microsoft.com/en-us/library/windows/desktop/…, ss64.com/nt/chcp.html, technet.microsoft.com/en-us/library/bb490874.aspx Турецкий chcp - 857.

caglaror 04.12.2014 14:42

Вероятно, вам просто нужно было использовать другой шрифт, чтобы также правильно отображать символы, Консоль Lucida у меня сработал.

Vlastimil Ovčáčík 05.01.2016 14:38

«Windows-1250 - это кодовая страница, используемая в Microsoft Windows для представления текстов на языках Центральной и Восточной Европы, использующих латинский алфавит, таких как польский, чешский, словацкий, венгерский, словенский, боснийский, хорватский, сербский (латинский алфавит), румынский. (до реформы правописания 1993 г.) и албанский ".

endolith 29.11.2016 18:36
cp1250 по-прежнему является 8-битным набором символов, он по-прежнему поддерживает только 256 символов, просто меняет то, что это за символы.
ivan_pozdeev 28.10.2017 05:36

Наконец-то полезный ответ! Отображаемые символы по-прежнему искажены, но аргументы (имена файлов с акцентами) теперь правильно передаются вызываемым программам. Спасибо! (Я тоже из Чехии)

Pontiac_CZ 14.11.2018 22:39

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

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

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

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

Windws-1253 не является кодовой страницей Unicode. Это стандартная кодовая страница из 256 символов. По-видимому, вы использовали только символы, которые могут отображаться на этой кодовой странице, но это не будет универсальным.

Vilx- 02.12.2012 17:05

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

Changing language for non-Unicode programs

Это не включает поддержку Unicode в cmd, а только переключает кодовую страницу по умолчанию на cp866, которая по-прежнему является 8-битным набором символов. Он даже использует cp866 вместо cp1251, что добавляет кучу проблем.

ivan_pozdeev 28.10.2017 05:30

См. Также мой ответ ниже, чтобы узнать о новой опции в новых версиях Windows 10.

zvi 14.04.2019 14:33

Что можно сделать лучше: просто установите доступный бесплатный языковой пакет Microsoft для японского языка. (Другие восточные языковые пакеты также будут работать, но я тестировал японский.)

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

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

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

Спасибо, это работает! Я не знаю, почему люди проголосовали против этого, это действительная альтернатива для некоторых людей .. Эта кодовая страница 1252 действительно решает проблему также на Windows Server 2012, где тот же код с CP 65001 не работал у меня. Я полагаю, это зависит от того, в какой кодовой странице был отредактирован пакетный скрипт, или от настроек ОС по умолчанию. В этом случае он был создан с помощью Блокнота на немецкой машине MUI с базовой ОС en-US.

Tony Wall 05.01.2017 16:15

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

  1. скопировать con temp.txt [нажмите Enter]
  2. Введите путь / имя файла [нажмите Enter]
  3. Нажмите Ctrl-Z [нажмите Enter]

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

Изменить кодовую страницу консоли Windows по умолчанию довольно сложно. Когда вы ищете в Интернете, вы найдете разные предложения, однако некоторые из них могут полностью сломать вашу Windows, то есть ваш компьютер больше не загружается.

Самое безопасное решение - это: Перейдите в раздел реестра HKEY_CURRENT_USER\Software\Microsoft\Command Processor и добавьте строковое значение Autorun = chcp 65001.

Или вы можете использовать этот небольшой пакетный скрипт для наиболее распространенных кодовых страниц.

@ECHO off

SET ROOT_KEY = "HKEY_CURRENT_USER"


FOR /f "skip=2 tokens=3" %%i in ('reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage /v OEMCP') do set OEMCP=%%i

ECHO System default values:

ECHO.
ECHO ...............................................
ECHO Select Codepage 
ECHO ...............................................
ECHO.
ECHO 1 - CP1252
ECHO 2 - UTF-8
ECHO 3 - CP850
ECHO 4 - ISO-8859-1
ECHO 5 - ISO-8859-15
ECHO 6 - US-ASCII
ECHO.
ECHO 9 - Reset to System Default (CP%OEMCP%)
ECHO 0 - EXIT
ECHO.


SET /P  CP = "Select a Codepage: "

if %CP%==1 (
    echo Set default Codepage to CP1252
    reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 1252>nul" /f
) else if %CP%==2 (
    echo Set default Codepage to UTF-8
    reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 65001>nul" /f
) else if %CP%==3 (
    echo Set default Codepage to CP850
    reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 850>nul" /f
) else if %CP%==4 (
    echo Set default Codepage to ISO-8859-1
    add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 28591>nul" /f
) else if %CP%==5 (
    echo Set default Codepage to ISO-8859-15
    add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 28605>nul" /f
) else if %CP%==6 (
    echo Set default Codepage to ASCII
    add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 20127>nul" /f
) else if %CP%==9 (
    echo Reset Codepage to System Default
    reg delete "%ROOT_KEY%\Software\Microsoft\Command Processor" /v AutoRun /f
) else if %CP%==0 (
    echo Bye
) else (
    echo Invalid choice
    pause
)

Использование @chcp 65001>nul вместо chcp 65001 подавляет вывод «Активная кодовая страница: 65001», который вы будете получать каждый раз при запуске нового окна командной строки.

Полный список всех доступных номеров вы можете получить на Идентификаторы кодовой страницы

Обратите внимание, что настройки будут применяться только для текущего пользователя. Если вы хотите установить его для всех пользователей, замените строку SET ROOT_KEY = "HKEY_CURRENT_USER" на SET ROOT_KEY = "HKEY_LOCAL_MACHINE".

хорошая идея и полезный пример!

user257319 05.12.2015 03:30

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

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

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

Enter image description here

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

Enter image description here

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

В этом (старом) случае проблема заключалась в сценарии, а не в консоли. Решит ли это использование сценариев bash?

Vilx- 02.01.2016 18:32

Да, действительно, они деревянные сценарии bash могут быть помечены как UTF-8 и просто работают с гораздо большей мощностью, чем пакетные файлы Windows - я знаю, что это был старый случай, но подумал, что этот вариант стоит отметить для дальнейшего использования, поскольку MS не кажется чтобы стать лучше в Юникоде.

Steve Barnes 03.01.2016 00:46
grep, найти и меньше.
Peter Mortensen 02.01.2017 02:47

Вывод символов в кодировке UTF-8 в порядке. Но ввод по-прежнему кодируется системной кодовой страницей.

Rick 06.06.2018 17:01

Просто добавим, что у пользователей Windows, возможно, уже есть оболочка bash, если вы используете Git: просто откройте окно Git> Git Bash.

skomisa 25.09.2018 04:53

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

  1. Вам нужен шрифт с поддержкой Unicode. Windows поставляется с консолью Lucida, которую можно выбрать, выполнив щелчок правой кнопкой мыши по строке заголовка командной строки и нажав опцию Defaults. Это также дает доступ к цветам. Обратите внимание, что вы также можете изменить настройки для командных окон, вызываемых определенными способами (например, открыть здесь, Visual Studio), выбрав вместо этого Properties.
  2. Вам необходимо установить кодовую страницу на cp65001, что похоже на попытку Microsoft предложить поддержку UTF-7 и UTF-8 в командной строке. Сделайте это, запустив chcp 65001 в командной строке. После установки он остается таким, пока окно не закроется. Вам нужно будет повторять это каждый раз при запуске cmd.exe.

Для более постоянного решения обратитесь к этот ответ на суперпользователе. Короче говоря, создайте запись REG_SZ (String) с помощью regedit в HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor и назовите ее AutoRun. Измените его значение на chcp 65001. Если вы не хотите видеть выходное сообщение от команды, используйте вместо этого @chcp 65001>nul.

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

На машине Windows 10 x64 я заставил командную строку отображать неанглийские символы следующим образом:

Откройте командную строку с повышенными привилегиями (запустите CMD.EXE от имени администратора). Запросите в реестре доступные шрифты TrueType для консоли:

    REG query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont"

Вы увидите такой вывод:

    0    REG_SZ    Lucida Console
    00    REG_SZ    Consolas
    936    REG_SZ    *新宋体
    932    REG_SZ    *MS ゴシック

Теперь нам нужно добавить шрифт 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

В целом использование кодовой страницы 65001 будет работать без ошибок только в Windows 10 с обновлением Creators. В Windows 7 будут ошибки как вывода, так и ввода. В Windows 8 и более старых версиях Windows 10 есть только ошибка ввода, которая ограничивает ввод 7-битным ASCII.

Eryk Sun 09.09.2017 16:43

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

Green 18.10.2020 09:41

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

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

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

  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/

Это не для меня. Китайские символы в выводе команды point все еще искажены.

Ssuching Yu 15.01.2018 06:37

@SiqingYu Я отказываюсь от безумной обстановки. Просто используйте blog.miniasp.com/post/2015/09/27/Useful-tool-Cmder.aspx

code4j 16.01.2018 12:09

Раньше я использовал Cmder, но он не может заменить консоль разработчика, используемую Visual Studio.

Ssuching Yu 17.01.2018 03:41

@SiqingYu Вы имеете в виду интерактивную оболочку PowerShell C#?

code4j 18.01.2018 13:22

Не интерактивная оболочка питания, а консоль разработчика, тоже используемая Visual C++. Это консоль отладки по умолчанию в проектах консольных приложений Win32.

Ssuching Yu 18.01.2018 14:46

Я вижу здесь несколько ответов, но они, похоже, не касаются вопроса - пользователь хочет получить ввод Unicode из командной строки.

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

1) У Microsoft есть расширение, которое позволяет main принимать широкий массив символов: int wmain (int argc, wchar_t * argv []); https://msdn.microsoft.com/en-us/library/6wd819wh.aspx

2) Вызовите API Windows, чтобы получить версию командной строки в Юникоде. wchar_t win_argv = (wchar_t) CommandLineToArgvW (GetCommandLineW (), & nargs); https://docs.microsoft.com/en-us/windows/desktop/api/shellapi/nf-shellapi-commandlinetoargvw

Прочтите это: http://utf8everywhere.org для получения подробной информации, особенно если вы поддерживаете другие операционные системы.

Ах, нет, извини, но ты упустил вопрос. Это когда я пишу программу, которая будет получить символов Юникода. Мой вопрос касался отправка символов Unicode для другой программы (которая, надеюсь, поддерживает их получение, но у меня действительно нет другого способа узнать, кроме разборки).

Vilx- 31.08.2018 18:24

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

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

Control panel -> Regional settings -> Administrative tab-> Change system locale...

Region Settings

Как добиться этого с помощью powershell или cmd?

Corey 19.11.2019 03:48

Я пытаюсь отобразить китайские символы в консоли, но это не сработало в 64-разрядной версии Windows 10 (установлено на турецком языке, а затем изменено на английский). Далее попробую установить китайский язык и посмотрю, работает ли.

akinuri 25.04.2020 15:02

Только будьте осторожны, это нарушило функциональность некоторых старых и дрянных программ, которые нормально работали на сервере 2019.

Alon Or 26.01.2021 18:52

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

См. «Представляем Windows Terminal» (из Кайла Корица) и Microsoft / Терминал.
Благодаря использованию шрифта Consolas будет обеспечена поддержка Unicode частичный.

Как описано в Microsoft/Terminal, выпуск 387:

There are 87,887 ideographs currently in Unicode. You need all of them too?
We need a boundary, and characters beyond that boundary should be handled by font fallback / font linking / whatever.

What Consolas should cover:

  • Characters that used as symbols that used by modern OSS programs in CLI.
  • These characters should follow Consolas' design and metrics, and properly aligned with existing Consolas characters.

What Consolas should NOT cover:

  • Characters and punctuation of scripts that beyond Latin, Greek and Cyrillic, especially characters need complex shaping (like Arabic).
  • These characters should be handled with font fallback.

Другие вопросы по теме